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

在我的 sparkJob 中,我执行了几个转换和聚合操作。我需要在管道操作之前和之后通知服务。具体来说,参考下面的代码,我需要在“管道操作1”对RDD中的所有文档完成后,“管道操作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) );


潇潇雨雨
浏览 121回答 2
2回答

肥皂起泡泡

在 Spark 转换中是惰性求值的,它们返回另一个 RDD 而不运行实际计算。逻辑和物理执行计划是通过操作操作(可能是计数操作或将转换后的数据保存到数据存储)创建的。此外,两个映射转换可能会创建一个组合执行计划,因此您无法区分哪个操作首先执行。如果您确实需要在特定阶段调用外部进程,您可以考虑将中间 rdd 结果保存到数据存储并运行外部进程。

小唯快跑啊

在调用操作之前,不会执行 Spark RDD 转换。在您的情况下, thestage_y或stage_z都不会被执行。您必须调用一个动作,指定在这些转换之后您想要做什么。一旦通过stage_yRDD调用的操作完成,下面的代码将被执行。希望能帮助到你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java