【发布时间】:2017-01-11 00:14:30
【问题描述】:
我已阅读 SO 中的 spark doc 和其他相关 Q&A,但我仍然不清楚 Spark Broadcast 变量的一些细节,尤其是粗体声明:
Spark 动作通过一组阶段执行,由分布式“shuffle”操作分隔。 Spark 会自动广播每个阶段内任务所需的公共数据。以这种方式广播的数据以序列化形式缓存,并在运行每个任务之前进行反序列化。这意味着仅当跨多个阶段的任务需要相同数据或以反序列化形式缓存数据很重要时,显式创建广播变量才有用。
- 什么是“公共数据”?
- 如果变量只在 1 个阶段使用,是否意味着无论其内存占用如何,广播它都没有用?
- 既然广播有效地“引用”了每个执行程序上的变量而不是多次复制它,那么在什么情况下广播是一个坏主意?我的意思是为什么这种广播行为不是默认的 spark 行为?
谢谢!
【问题讨论】:
标签: apache-spark