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

时间:2016-04-21 12:09:37

标签: scala apache-spark dataframe rdd union-all

我想从一个可以匹配现有架构的字符串列表中创建一个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()

如果我使用String of List,相同的代码将失败。我发现差异在于rowValueTuple已创建Tuple。 由于rowValues列表的大小动态变化,我无法手动创建Tuple*对象。 我怎样才能做到这一点?我错过了什么?如何平整此列表以满足要求?

请感谢您的帮助。

1 个答案:

答案 0 :(得分: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)