2016-12-19 23 views
0

2次元の整数リストを持っています。これをRDD [vector]またはJavaRDD [vector]に変換して、predictメソッドを使用したいと思います。 spark MLlibのSVMモデルの 私は以下をrddに変換するために試しました。しかし、これは私が必要なものではないようです。2dリストをRDD [vector]またはJavaRDD [vector] scalaに変換する

val tuppleSlides = encoded.iterator.sliding(10).toList 
val rdd = sc.parallelize(tuppleSlides) 

これを正しいタイプに変換するコマンドは何ですか?

ありがとうございます。

答えて

1

MLlibを使用する場合は、RDD[LabeledPoint]が必要です。あなたの2Dデータのリストとラベルのいくつかのリストを考えると、あなたはそうのようなあなたのRDD[LabeledPoint]を作成することができます。http://spark.apache.org/:私は、これらのタイプを必要と理由です予測について

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 
+0

私はこのドキュメントを読みますdocs/latest/api/scala/index.html#org.apache.spark.mllib.classification.SVMModel。ラベル付けされたポイントRDDとして行う方法についてのヒントはありますか? – Kratos

+0

かなり簡単です: 'val pos = LabeledPoint(1.0、Vectors.dense(1.0、0.0、3.0))'。最初のargへの 'LabeledPoint'はラベル、2番目のargは特徴ベクトルです。 –

+0

そしてScalaの標準ベクトルではなく、MlLibベクターを使用してください。 –