Ho una lista 2 di interi e mi piacerebbeconvertirlo in RDD [vector] o JavaRDD [vector] per utilizzare il metodo di previsione del modello SVM in spark MLlib. Ho provato quanto segue, per convertirlo in rdd. Ma sembra che questo non sia ciò di cui ho bisogno.
val tuppleSlides = encoded.iterator.sliding(10).toList
val rdd = sc.parallelize(tuppleSlides)
Qualche idea qual è il comando per convertirlo nel tipo giusto?
Grazie in anticipo.
risposte:
1 per risposta № 1Se vuoi usare MLlib avrai bisogno di un RDD[LabeledPoint]
. Dato il tuo elenco 2D di dati e alcuni elenchi di etichette, puoi creare il tuo RDD[LabeledPoint]
così:
scala> val labels = List(1.0, -1.0)
labels: List[Double] = List(1.0, -1.0)
scala> val myData = List(List(1d,2d), List(3d,4d))
myData: List[List[Double]] = List(List(1.0, 2.0), List(3.0, 4.0))
scala> import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.ml.linalg.Vectors
scala> import org.apache.spark.ml.feature.LabeledPoint
import org.apache.spark.ml.feature.LabeledPoint
scala> val vectors = myData.map(x => Vectors.dense(x.toArray))
vectors: List[org.apache.spark.ml.linalg.Vector] = List([1.0,2.0], [3.0,4.0])
scala> val labPts = labels.zip(vectors).map{case (l, fV) => LabeledPoint(l, fV)}
labPts: List[org.apache.spark.ml.feature.LabeledPoint] = List((1.0,[1.0,2.0]), (-1.0,[3.0,4.0]))
scala> val myRDD = sc.parallelize(labPts)
myRDD: org.apache.spark.rdd.RDD[org.apache.spark.ml.feature.LabeledPoint] = ParallelCollectionRDD[0] at parallelize at <console>:34