我正在阅读here中的spark
有一次,博客上写道:
假设有一个应用程序希望对语料库中每个单词的出现次数进行计数,并将结果作为Map拉入驱动程序。一种方法是在每个分区计算本地Map,然后在驱动程序中合并Map,这种方法可以使用aggregateByKey实现。另一种方法是以完全分布式的方式执行计数,然后简单地将结果collectAsMap到驱动程序。
因此,根据我的理解,所描述的两种方法是:
方法一:
1.在每个执行器中为创建散列Map
1.从驱动程序上的所有执行器收集密钥1并进行聚合
1.从驱动程序上的所有执行器收集密钥2并进行聚合
等等等等
这就是问题所在,我不认为这种方法1会出现在spark中,除非用户下定决心要这么做,并开始使用collect和filter在驱动程序上逐个键地获取数据,然后在驱动程序上编写代码来合并结果
方法2(我认为这是在spark中经常发生的事情,除非你使用groupBy,其中合并器不运行。这是典型的reduceBy机制):
1.在Map端计算第一级聚合
- Shuffle
1.根据步骤1中的所有部分聚合结果计算第二级聚合
这使我相信我误解了方法1和作者想说的话。你能帮助我理解引用文本中的方法1是什么吗?
1条答案
按热度按时间yacmzcpb1#
也许(我只是猜测!)桑迪Ryza先生指的是RDD的
reduceByKeyLocally
函数,它返回Map
到驱动程序,然后执行自己选择的一些reduce函数。但是很难确定,因为您的文章是10年前写的...