2017-04-20 11 views
0

私のデータセットはparallelizeですが、再分割されたデータを使用してRowMatrixをインスタンス化しようとすると、type mismatchエラーが発生します。タイプの不一致 - ベクトルの代わりに(Int、Vector)

Main.scala:59: type mismatch; 
found : org.apache.spark.rdd.RDD[org.apache.spark.rdd.RDD[(Int, org.apache.spark.mllib.linalg.Vector)]] 
required: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] 
     val mat: RowMatrix = new RowMatrix(repartitioned) 
次のエラーを与える私は RowMatrix

以来
val mat: RowMatrix = new RowMatrix(repartitioned) 

を構築する方法は非常に確認していない今

val data = sc.textFile("data.txt.gz").flatMap(r => r.split(' ') match { 
    case Array(doc, word, count) => Some((doc.toInt, (word.toInt - 1, count.toDouble))) 
    case _ => None 
}).groupByKey().mapValues(a => Vectors.sparse(vocab_size, a.toSeq)) 

val repartitioned = sc.parallelize(Seq(data), 10) 

ここだが、データを読み取り、再分割のためのコードです

答えて

2

parallelizeはローカル値のSeqからRDDを作成するためのものです。あなたは既にRDDを持っています。 rddをrddに入れようとしているため、並列化を呼び出そうとしても機能しません。データを再分割する場合は、再分割方法を使用します。すなわち、 data.repartition(10)

mapValuesを呼び出すと、演算子はペアの値にのみ適用されますが、結果のRDDはまだRDD [(Key、Value)]です。キーを破棄したい場合は、mapValuesの代わりにmapを使用してください。

+0

これは機能します。より正確には、 'val repartitioned = data.repartition(10);マット:RowMatrix =新しいRowMatrix(repartitioned.values) 'を実行します。どうもありがとう。 –

関連する問題