Scala Spark:如何从字符串列表创建RDD并转换为DataFrame

Neh*_*haM 7 scala union-all dataframe apache-spark rdd

我想从一个可以匹配现有模式的字符串列表中创建一个DataFrame.这是我的代码.

    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()
Run Code Online (Sandbox Code Playgroud)

如果我使用字符串列表,相同的代码将失败.我看到的区别在于创建了rowValueTuple一个Tuple.由于rowValues列表的大小动态变化,我无法手动创建Tuple*对象.我怎样才能做到这一点?我错过了什么?如何平整此列表以满足要求?

请欣赏你的帮助.

Vit*_*nko 13

DataFrame具有固定列数的模式,因此每个变量长度列表生成行似乎并不自然.无论如何,您可以使用现有架构从RDD [Row]创建DataFrame,如下所示:

val rdd = sqlContext.sparkContext.parallelize(Seq(rowValues))
val rowRdd = rdd.map(v => Row(v: _*))
val newRow = sqlContext.createDataFrame(rdd, df.schema)
Run Code Online (Sandbox Code Playgroud)

  • @Rylan:这里的'df`是什么? (4认同)
  • 这里只需注意,最后一行应该是```val newRow = sqlContext.createDataFrame(rowRdd,df.schema)```至少这对我有用. (3认同)