2
我写,需要一个分块矩阵,并且设置不0到1地图功能
public BlockMatrix SetNonZeroesToOnes(BlockMatrix matrix)
{
// initialize
JavaRDD<MatrixEntry> matrixEntries = matrix.toCoordinateMatrix().entries().toJavaRDD();
// transformation
matrixEntries.map(t ->
{
if(t.value() != 0)
{
return new MatrixEntry(t.i(), t.j(), 1);
}
return new MatrixEntry(t.i(), t.j(), 0);
});
// action
List<MatrixEntry> list = matrixEntries.collect();
for (MatrixEntry matrixEntry : list)
{
System.out.println("(" + matrixEntry.i() + ", " + matrixEntry.j() + ") = " + matrixEntry.value());
}
// return value
CoordinateMatrix coordMat = new CoordinateMatrix(matrixEntries.rdd(), matrix.numRows(), matrix.numCols());
return coordMat.toBlockMatrix();
}
的问题是,从不执行的地图功能的所有值的方法。我还没有得到将该方法与我的代码集成,但现在我只是运行JUnit测试。测试设置非常简单,BlockMatrix是由本地火花上下文并行处理并馈送到方法的数据生成的。
我知道Spark本身的惰性执行,这就是为什么我添加了collect方法,因为一个动作应该触发执行以前的转换。请注意,它不应该在最终版本中,因为其他方法将对数据集执行操作。
我甚至在地图部分添加了跟踪日志,他们从不记录,调试器将不会进入它,当然功能不会执行。
所以,问题是,我在这里错过了什么?为什么这张地图 - >收集的电话与其他类似的电话不同?