【问题标题】:Spark: Convert RDD[String] to DataFrame [duplicate]Spark:将RDD [String]转换为DataFrame [重复]
【发布时间】:2018-10-21 22:52:29
【问题描述】:

我正在尝试将 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 读取。

【问题讨论】:

标签: scala apache-spark


【解决方案1】:

如果您的所有数组都具有相同的大小,您可以使用 apply on 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|
+-----+-----+-----+

【讨论】:

    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 2016-05-29
    • 2021-09-28
    • 2018-03-05
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多