我正在尝试使用 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(使用前将#替换为@)