Я написал метод, который принимает блочную матрицу и устанавливает все значения, которые не являются 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, поскольку действие должно инициировать выполнение предыдущих преобразований. Обратите внимание, что он не должен присутствовать в окончательной версии, так как другие методы будут выполнять действия в наборе данных.
Я даже добавил журналы трассировки в разделе карты, и они никогда не регистрируются, отладчик не будет в него входить, и, конечно, функциональность не выполняется.
Итак, вопрос в том, что мне здесь не хватает? Почему эта карта -> собирать вызов, отличный от других подобных?