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

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

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

ответ

3

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

Смежные вопросы