阅读Spark的文档我看到了
以这种方式广播的数据以序列化形式缓存并在运行每个任务之前反序列化。这意味着明确创建广播变量仅在跨多个阶段的任务需要相同数据时才有用,或者以反序列化形式缓存数据非常重要。
我理解为什么广播变量在多个任务中重复使用时很有用。您不希望重新发送所有关闭内容。
然而,第二部分以粗体显示,以反序列化形式缓存数据非常重要。什么时候以及为什么这很重要?如果您只在1个任务中使用数据,它仍会被序列化/反序列化一次,不是吗?
答案 0 :(得分:1)
我认为你忽略了以下部分:
并在运行每项任务之前进行反序列化。
单个阶段通常由多个任务组成(通常只有一个分区,是吗?),属于同一个阶段的多个任务可以由同一个执行者处理。由于反序列化可能非常昂贵,您可能只希望执行一次。