我需要parallelize
我的数据集,但是一旦我尝试使用重新分区的数据实例化type mismatch
,就会出现RowMatrix
错误。
这里是用于读取和重新分区数据的代码:
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)
现在我不太确定如何构建RowMatrix
,因为
val mat: RowMatrix = new RowMatrix(repartitioned)
给出以下错误:
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)
答案 0 :(得分:2)
parallelize用于从Seq的本地值创建和RDD,你已经有了一个RDD。试图调用并行化它不起作用,因为你试图将rdd放入rdd。如果要重新分区数据,请使用重新分区方法。即。 data.repartition(10)
当你调用mapValues时,它只适用于对你的对的值的操作,但是得到的RDD仍然是RDD [(Key,Value)]。如果您想丢弃密钥,那么只需使用map而不是mapValues。