Spark:将RDD [String]转换为DataFrame

时间:2018-05-11 13:43:00

标签: scala apache-spark

我试图将RDD [String]转换为Dataframe。该字符串以逗号分隔,因此我想为逗号之间的每个值获取一列。 为此,我尝试了以下步骤:

val allNewData_split = allNewData.map(e => e.split(",")) //RDD[Array[String]]
val df_newData = allNewData_split.toDF()  //DataFrame

但我得到了这个:

+--------------------+
|               value|
+--------------------+
|[0.0, 0.170716979...|
|[0.0, 0.272535901...|
|[0.0, 0.232002948...|
+--------------------+

这不是这篇文章的重复(How to convert rdd object to dataframe in spark),因为我要求RDD [String]而不是RDD [Row]。

它也不是Spark - load CSV file as DataFrame?的副本,因为这个问题并不是要将CSV文件作为DataFrame读取。

1 个答案:

答案 0 :(得分:2)

如果您的所有数组都具有相同的大小,则可以使用apply上的Column将数组转换为这样的列:

val df = Seq(
  Array(1,2,3),
  Array(4,5,6)
).toDF("arr")

df.show()

+---------+
|      arr|
+---------+
|[1, 2, 3]|
|[4, 5, 6]|
+---------+

val ncols = 3

val selectCols = (0 until  ncols).map(i => $"arr"(i).as(s"col_$i"))

df
  .select(selectCols:_*)
  .show()

+-----+-----+-----+
|col_0|col_1|col_2|
+-----+-----+-----+
|    1|    2|    3|
|    4|    5|    6|
+-----+-----+-----+