我的数据存储在一个 RDD[LabeledPoint]
中(在下面的代码中表示为 sparse0.sparseData
)
我想将其转换为 RDD[(Long,Vector)]
,这样我就可以在mllib包中运行LDA分析。
我能做到的最好的方法是映射到 RDD[(Long,Vector[Double])]
,但在输入 LDA.run
方法时无法编译
尝试映射到 RDD[(Long,Vector)]
在 .map
方法中也无法编译。(错误信息是Vector需要类型参数)
我的映射方法看起来很复杂,这表明我可能遗漏了一些显而易见的东西。任何提示将不胜感激
val mappedData:Map[Long,Vector[Double]]=sparse0.sparseData().collect().map{ var count:Int=0 row => count=count+1 new Tuple2[Long,Vector[Double]](count,row.features.toArray.toVector)}.toMapval mappedRDD=spark.sparkContext.parallelize(mappedData.toSeq)// 使用LDA将文档聚类成三个主题val ldaModel = new LDA().setK(3).run(mappedRDD)
回答:
Scala中的 Vector
与 mllib.linalg.Vector
不同。我会使用 zipWithIndex
val mappedRDD = sparse0.sparseData().map(_.features).zipWithIndex.map(_.swap)