2017-11-15 6 views
0

Ich habe Daten in einem RDD[LabeledPoint] (bezeichnet als sparse0.sparseData im Code unten)Scala: Convert RDD [LabelledPoint] zu RDD [(Long, Vector)]

ich RDD[(Long,Vector)] konvertieren wollen, so kann ich die LDA laufen Analyse im MLLIB-Paket.

Das Beste, was ich eine Karte zu RDD[(Long,Vector[Double])] verwalten kann, die nicht kompiliert, wenn sie in dem Verfahren LDA.run eingegeben

-RDD[(Long,Vector)] abzubilden versuchen, kompilieren nicht in der .map Methode. (Fehlervektor nimmt Typparameter)

Die Tatsache, dass meine Kartenmethode verschlungen erscheint, legt nahe, dass mir etwas Offensichtliches fehlt. Irgendwelche Hinweise stark

geschätzt würde
val mappedData:Map[Long,Vector[Double]]=sparse0.sparseData().collect().map 
{ 
     var count:Int=0 
    row => 
    count=count+1 
    new Tuple2[Long,Vector[Double]](count,row.features.toArray.toVector) 



}.toMap 

val mappedRDD=spark.sparkContext.parallelize(mappedData.toSeq) 

// Cluster the documents into three topics using LDA 
val ldaModel = new LDA().setK(3).run(mappedRDD) 

Antwort

2

Scala Vector ist nicht das gleiche wie mllib.linalg.Vector. Ich würde zipWithIndex

val mappedRDD = sparse0.sparseData().map(_.features).zipWithIndex.map(_.swap) 
+0

yup, Sie schlugen mich, um es :) wenn mein mappedData mit val mappedData eingegeben wird: Map [Lange, org.apache.spark.mllib.linalg.Vector] alles funktioniert – Jake

Verwandte Themen