Как выполнить код после операции преобразования RDD-канала - PullRequest
0 голосов
/ 26 сентября 2018

В моем sparkJob я выполняю несколько операций преобразования и агрегирования.Мне нужно уведомить службу до и после операции по конвейеру.В частности, ссылаясь на приведенный ниже код, мне нужно сделать сервисный вызов после того, как «операция по конвейеру 1» завершена для всех документов в СДР и до того, как начнется «операция по конвейеру 2».

JavaRDD<Document> stage_y = stage_x.
                map(r -> someRddOperation(r) ).
                pipe( "pipe operation 1 to external process" ).
                map(r -> someMapOps(r) );

// execute something before processing stage_y

JavaRDD<Document> stage_z = stage_y.
                pipe( "pipe operation 2 to another external process" ).
                map(r -> someMapOps(r) );

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

В преобразованиях Spark лениво оцениваются, они возвращают другой RDD без выполнения фактического вычисления.Логические и физические планы выполнения создаются с помощью операции действия (это может быть операция подсчета или сохранение преобразованных данных в хранилище данных).

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

Если вам действительно нужно вызвать внешний процесс на определенной стадии, вы можете сохранить промежуточный результат rdd в хранилище данных и запустить внешний процесс.

0 голосов
/ 26 сентября 2018

Преобразования Spark RDD не выполняются, пока не будет вызвано действие .В вашем случае, ни stage_y, ни stage_z не будут выполнены вообще.Вы должны вызвать действие, определяющее, что вы хотите сделать после этих преобразований.

Как только действие, вызванное с помощью stage_y RDD, будет выполнено, код, приведенный ниже, будет выполнен.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...