RDD管道转换操作后如何执行代码

时间:2018-09-26 16:33:14

标签: java apache-spark

在我的sparkJob中,我执行一些转换和聚合操作。我需要在管道操作之前和之后通知服务。具体来说,参考下面的代码,我需要在RDD中的所有文档上完成“管道操作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 :(得分:0)

在调用action之前,不执行Spark RDD转换。对于您而言,stage_ystage_z都不会执行。您必须调用一个操作,指定在这些转换后要执行的操作。

通过stage_y RDD调用的操作完成后,将执行下面的代码。

希望有帮助。

答案 1 :(得分:0)

在对Spark转换进行延迟计算时,它们不运行实际计算就返回另一个RDD。逻辑和物理执行计划是通过操作操作(可能是计数操作或将转换后的数据保存到数据存储)创建的。

此外,两个映射转换可能会创建组合的执行计划,因此您无法区分哪个操作首先执行。

如果您确实需要在特定阶段调用外部进程,则可以考虑将中间的rdd结果保存到数据存储中并运行外部进程。