Spark Mllib .toBlockMatrix 结果矩阵为 0.0

Spark Mllib .toBlockMatrix results in matrix of 0.0

我正在尝试从输入数据文件创建块矩阵。我已经设法从数据文件中读取数据并正确存储在 IndexedRowMatrix 和 CoordinateMatrix 格式中。

当我在 CoordinateMatrix 上使用 .toBlockMatrix 时,结果是一个仅包含 0.0 且维度与 CoordinateMatrix 相同的块矩阵。

我使用的是1.5.0-cdh5.5.0版本

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.mllib.linalg._
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.mllib.linalg.distributed.CoordinateMatrix
import org.apache.spark.mllib.linalg.distributed.IndexedRowMatrix
import org.apache.spark.mllib.linalg.distributed.IndexedRow
import org.apache.spark.mllib.linalg.distributed.BlockMatrix

val conf = new SparkConf().setMaster("local").setAppName("Transpose");
val sc = new SparkContext(conf)

val dataRDD = sc.textFile("/user/cloudera/data/data.txt").map(line => Vectors.dense(line.split(" ").map(_.toDouble))).zipWithIndex.map(_.swap)
//Format of dataRDD is RDD[(Long, Vector)]

val rows = dataRDD.map{case(k,v) => IndexedRow(k,v)}
//Format of rows is RDD[IndexedRow]

val mat: IndexedRowMatrix = new IndexedRowMatrix(rows)
val coordMat: CoordinateMatrix = mat.toCoordinateMatrix()
val blockMat: BlockMatrix = coordMat.toBlockMatrix().cache()

数据文件只是两列乘以六十行整数。

140 123
141 310
310 381
480 321
... ...

更新:

我进行了一些调查,发现 groupByKey 函数无法正常工作,这是阻止 BlockMatrix 正确形成的原因。但是,我仍然不知道为什么 groupByKey、join 和 groupBy 不起作用并且总是返回空结果。

我已经通过删除以下代码行解决了问题:

val conf = new SparkConf().setMaster("local").setAppName("Transpose")
val sc = new SparkContext(conf)

我在以下链接页面中 Farzad Nozarian 的评论中找到了答案,

作为 side-note 这可能会帮助那些在 .groupByKey、.reduceByKey、.join 等中得到空结果的人