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方法,因爲一個動作應該觸發執行以前的轉換。請注意,它不應該在最終版本中,因爲其他方法將對數據集執行操作。
我甚至在地圖部分添加了跟蹤日誌,他們從不記錄,調試器將不會進入它,當然功能不會執行。
所以,問題是,我在這裏錯過了什麼?爲什麼這張地圖 - >收集的電話與其他類似的電話不同?