2017-05-05 66 views
1

我有一個包含單個列的RowMatrix的實例。 我想把這個RowMatrix變成一個數據幀,但我不太確定如何將org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector]轉換爲數據幀。RDD [矢量]到數據框

val mat: RowMatrix = new RowMatrix(centred) 
val mat_rows = mat.rows // RDD[Vector] 

我知道,如果我有兩個(或更多)列,我可以使用下面的代碼

val mat_rdd = mat_rows.map(_.toArray).map{case Array(p0, p1) => (p0, p1)} 
val df = sparkSession.createDataFrame(mat_rdd).toDF("f1", "f2") 

的問題是,我剛一列。如果我修改上面的代碼來創建一個單列數據幀我得到以下錯誤:

overloaded method value createDataFrame with alternatives: 

回答

1

它工作正常,在星火2.0.0:

import org.apache.spark.mllib.linalg.Vectors 
import org.apache.spark.mllib.linalg.distributed.RowMatrix 

val rows = spark.sparkContext.parallelize(Array(Vectors.dense(1), Vectors.dense(1))) 
val mat: RowMatrix = new RowMatrix(rows) 
scala> mat.rows.map(_.toArray).map{ case Array(a) => a}.toDF("f1").show() 
+---+ 
| f1| 
+---+ 
|1.0| 
|1.0| 
+---+