我目前有一个RDD[Seq[MatrixEntry]]
,我试图通过将RDD[MatrixEntry]
展开或展平来转换为Seq
。我可以将Seq
转换为其他数据类型,例如List
,但是我无法将其完全删除。
我的问题与this非常相似,因为我可以转换Seq
,但是使用MatrixEntry
而不是Ints,但尝试使用类似的解决方案
error: type mismatch;
found : org.apache.spark.mllib.linalg.distributed.MatrixEntry
required: scala.collection.GenTraversableOnce[?]
我要运行的代码正在尝试将DataFrame转换为CoordinateMatrix:
def matmaker(data: DataFrame):Unit={
val rrd:RDD[(List[(Any,Int)],Long)] = data.rdd
.map(r => r.toSeq.toList.zipWithIndex)
.zipWithIndex()
val precord:RDD[MatrixEntry] = rrd.map{
case ((s:Seq[(Any,Int)],r:Long)) => s.map{
case (value:Any,c:Int) => MatrixEntry(r,c,value.toString.toDouble)
}.flatMap(List => List) //Problem Here
}
precord.foreach(println)
//new CoordinateMatrix(precord.map(r=>r.take(r.length-1)))
}
测试完成后,该函数的最终输入将从Unit
更改为CoordinateMatrix
。
答案 0 :(得分:0)
您的平面图只是放错了位置。
您需要像这样写}.flatMap(x=>x)}
来代替}}.flatMap(x=>x)
:
def matmaker(data: DataFrame):CoordinateMatrix={
val rrd:RDD[(List[(Any,Int)],Long)] = data.rdd
.map(r => r.toSeq.toList.zipWithIndex)
.zipWithIndex()
val precord:RDD[MatrixEntry] = rrd.map{
case ((s:Seq[(Any,Int)],r:Long)) => s.map{
case (value:Any,c:Int) => MatrixEntry(r,c,value.toString.toDouble)
}//No Problem Here, flatmap was moved
}.flatMap(x => x)
new CoordinateMatrix(precord)
}