Je veux créer un DataFrame à partir d'une liste de chaînes pouvant correspondre au schéma existant. Voici mon code.
val rowValues = List("ann", "f", "90", "world", "23456") // fails
val rowValueTuple = ("ann", "f", "90", "world", "23456") //works
val newRow = sqlContext.sparkContext.parallelize(Seq(rowValueTuple)).toDF(df.columns: _*)
val newdf = df.unionAll(newRow).show()
Le même code échoue si j'utilise la liste de chaînes. Je vois que la différence est avec rowValueTuple
un Tuple
est créé. Étant donné que la taille de la liste rowValues
change dynamiquement, je ne peux pas créer manuellement Tuple*
objet. Comment puis-je faire ceci? Qu'est-ce que je rate? Comment puis-je aplatir cette liste pour répondre à l'exigence?
Merci de votre aide.
DataFrame a un schéma avec un nombre fixe de colonnes, il n'est donc pas naturel de créer une ligne par liste de longueur variable. Quoi qu'il en soit, vous pouvez créer votre DataFrame à partir de RDD [Row] en utilisant un schéma existant, comme ceci:
val rdd = sqlContext.sparkContext.parallelize(Seq(rowValues))
val rowRdd = rdd.map(v => Row(v: _*))
val newRow = sqlContext.createDataFrame(rdd, df.schema)