2017-10-11 2 views
0

Nach this example habe ich TF-IDF-Gewichtungen für einige Dokumente berechnet. Jetzt möchte ich RowMatrix verwenden, um Dokumentähnlichkeiten zu berechnen. Aber ich habe Probleme, die Daten in das richtige Format zu bringen. Was ich gerade habe, ist ein DataFrame, dessen Zeilen (String, SparseVector) die beiden Arten der Spalten haben. Ich soll dies RDD[Vector] umzuwandeln, das dachte ich wäre so einfach wie:In Spark, wie konvertiert man DataFrame mit SparseVector in RDD [Vector]?

features.map(row => row.getAs[SparseVector](1)).rdd() 

Aber ich bekomme diese Fehlermeldung:

<console>:58: error: Unable to find encoder for type stored in a 
Dataset. Primitive types (Int, String, etc) and Product types (case 
classes) are supported by importing spark.implicits._ Support for 
serializing other types will be added in future releases. 

spark.implicits._ Importieren macht keinen Unterschied.

Also, was ist los? Ich bin überrascht, dass Spark nicht wissen kann, wie man seine eigenen Vektordatentypen codiert.

Antwort

1

Konvertieren Sie einfach zu RDD vor map.

import org.apache.spark.ml.linalg._ 

val df = Seq((1, Vectors.sparse(1, Array(), Array()))).toDF 

df.rdd.map(row => row.getAs[Vector](1)) 
Verwandte Themen