foreachRDD是在Driver上执行的吗?

2023-12-22

我正在尝试使用 Spark Streaming 处理 JMS 队列 (QPID) 上收到的一些 XML 数据。将 xml 作为 DStream 获取后,我将它们转换为 Dataframe,这样我就可以将它们与已加载的 Dataframe 形式的一些静态数据连接起来。 但根据 DStream 上 foreachRdd 方法的 API 文档: 它在 Driver 上执行,这是否意味着所有处理逻辑将仅在 Driver 上运行,而不会分发给工作程序/执行程序。

API文档

foreachRDD(func)

应用最通用的输出运算符 函数 func 到从流生成的每个 RDD。这个功能 应该将每个RDD中的数据推送到外部系统,例如保存 将 RDD 写入文件,或通过网络将其写入数据库。笔记 函数 func 在运行的驱动程序进程中执行 流应用程序,通常会有 RDD 操作 将强制流式 RDD 的计算。


那么这是否意味着所有处理逻辑只会在 Driver 上运行而不是 分发给工人/执行者。

No, 函数本身运行在驱动程序上,但不要忘记它运行在RDD。您将在上使用的内部函数RDD, 例如foreachPartition, map, filter等将仍然在工作节点上运行. This won't导致所有数据通过网络发送回驱动程序,除非您调用类似的方法collect,这确实如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

foreachRDD是在Driver上执行的吗? 的相关文章

随机推荐