我试图将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读取。
答案 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|
+-----+-----+-----+