我刚开始使用Spark,并且正在努力完成任务的概念。
任何人都可以帮助我理解动作(比如减少)何时不在驱动程序中运行。
来自spark教程,
"使用函数func聚合数据集的元素(其中 接受两个参数并返回一个)。功能应该是 可交换和关联,以便可以正确计算 平行。 "
我目前正在尝试一个应用程序,该应用程序在' n'文件并计算单词数。
从Web UI中,任务数等于文件数。所有reduce函数都在驱动程序节点上进行。
请告诉我们减少功能不会在驱动程序上执行的情况。任务是否总是包含"转换+动作"或只是"转型"
答案 0 :(得分:2)
所有操作都在群集上执行,操作结果可能最终在驱动程序上(取决于操作)。
一般来说,围绕业务逻辑编写的spark代码并不是实际运行的程序 - 而是spark使用它来创建一个将在集群中执行代码的计划。该计划创建了一个任务,可以在分区上完成所有操作,而无需随机播放数据。每次spark都需要以不同的方式排列数据(例如在排序之后)它将在第一个和后一个任务之间创建一个新任务和一个shuffle
答案 1 :(得分:1)
.toDebugString
以查看每个职位分配的位置;每个级别的缩进都是一个新阶段。我认为在驱动程序上显示的reduce函数有点用词不当,因为它将首先并行运行,然后合并结果。所以,我希望这项任务确实可以在工人身上尽可能地运行。