/ / converti una lista 2d in RDD [vector] o JavaRDD [vector] scala-scala, vector, type-conversion, rdd

convertire una lista 2d in RDD [vector] o JavaRDD [vector] scala-scala, vector, type-conversion, rdd

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 № 1

Se 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