функция карты никогда не выполняется

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

Я даже добавил журналы трассировки в раздел карты, и они никогда не регистрируются, отладчик не вмешивается в это и, конечно, функциональность не выполняется.

Итак, вопрос в том, что мне здесь не хватает? Почему эта карта -> вызов вызова отличается от других подобных?


person user3209815    schedule 06.11.2016    source источник


Ответы (1)


Вы игнорируете результат вызова matrixEntries.map(...), поэтому Spark даже не пытается создать результат. Если вам не нужна ссылка на исходную матрицу, вы должны написать matrixEntries = matrixEntries.map(...).

person kgeorgiy    schedule 06.11.2016