将 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的主要内容,如果未能解决你的问题,请参考以下文章
如何将 spark DataFrame 转换为 RDD mllib LabeledPoints?
将 RDD 转换为 DataFrame Spark Streaming 时的 ClassCastException