web-dev-qa-db-fra.com

Scala Spark: comment créer un RDD à partir d'une liste de chaînes et convertir en DataFrame

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.

7
NehaM

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)
13