2017-05-05 7 views
1

Ich habe eine Instanz von RowMatrix, die eine einzelne Spalte enthält. Ich versuche, diese RowMatrix in einen Datenrahmen zu verwandeln, aber ich bin nicht ganz sicher, wie man org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] in einen Datenrahmen umwandelt.RDD [Vector] zu Dataframe

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

Ich weiß, dass, wenn ich hatte zwei (oder mehr) Spalten ich das folgende Stück Code

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

Das Problem ist, dass ich nur verwenden könnte eine einzelne Spalte haben. Wenn ich den obigen Code ändern eine einspaltige Datenrahmen ich die folgende Fehlermeldung erhalten zu erstellen:

overloaded method value createDataFrame with alternatives: 

Antwort

1

Es funktioniert gut in Spark-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| 
+---+ 
Verwandte Themen