将 RDD 转换为 Dataframe Spark

Posted

技术标签:

【中文标题】将 RDD 转换为 Dataframe Spark【英文标题】:Converting a RDD into a Dataframe Spark 【发布时间】:2017-02-26 00:05:19 【问题描述】:

如何将具有以下结构的 RDD 转换为 scala 中的数据帧

org.apache.spark.rdd.RDD[(Long, org.apache.spark.mllib.linalg.Vector)] = MapPartitionsRDD[42]

这里RDD的每一行都包含一个索引Long和一个向量org.apache.spark.mllib.linalg.Vector

我想将org.apache.spark.mllib.linalg.Vector 的每个组件放在一行数据框中的单独列中。

【问题讨论】:

你试过使用 rdd.toDF() 吗?它是隐式可用的 @AndreiT。它不会创建我想要的数据框,我希望将 org.apache.spark.mllib.linalg.Vector 的每个组件放在单独的列中。 向量有多少条目? @rogue-one 1000 @FahadIbrar 你能确认发布的答案是否有效吗? 【参考方案1】:

以下示例有效。为简洁起见,我假设矢量大小为 10。您应该能够将其缩放到 1000

import org.apache.spark.mllib.linalg.Vectors
val rdd = sc.parallelize(Seq((1L,Vectors.dense((1 to 10).map(_ * 1.0).toArray))))
val df = rdd.map(case (a,b) => (a,b.toArray) ).toDF("c1", "c2")
df.select(($"c1" +: (0 to 9).map(idx => $"c2"(idx) as "c" + (idx + 2)):_*)).show()  
+---+---+---+---+---+---+---+---+---+---+----+
| c1| c2| c3| c4| c5| c6| c7| c8| c9|c10| c11|
+---+---+---+---+---+---+---+---+---+---+----+
|  1|1.0|2.0|3.0|4.0|5.0|6.0|7.0|8.0|9.0|10.0|
+---+---+---+---+---+---+---+---+---+---+----+

【讨论】:

以上是关于将 RDD 转换为 Dataframe Spark的主要内容,如果未能解决你的问题,请参考以下文章

在scala中将Spark Dataframe转换为RDD

如何将 spark DataFrame 转换为 RDD mllib LabeledPoints?

将 RDD 转换为 DataFrame Spark Streaming 时的 ClassCastException

Spark RDD转换成DataFrame的两种方式

如何在 Spark Streaming 中将 RDD 转换为 DataFrame,而不仅仅是 Spark

spark-sql将Rdd转换为DataFrame进行操作的两种方法