2017-02-26 104 views
1

我如何轉換的RDD具有以下結構轉變爲數據幀中階轉換一個RDD成數據幀星火

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的每個組件放在一行數據框的單獨列中。

+0

您是否嘗試過使用rdd.toDF()?它隱含在 –

+0

@AndreiT。它不會創建我想要的數據框,我想將'org.apache.spark.mllib.linalg.Vector'的每個組件放在單獨的列中。 –

+0

矢量有多少條目? –

回答

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| 
+---+---+---+---+---+---+---+---+---+---+----+