Spark中reduceByKey是否创建新Job?为何代码生成3个Job?
Spark词频统计3个Job的来源解析
关键结论
reduceByKey是转换算子,不会触发新Job——只有行动算子(Action)才会触发Spark执行Job。
3个Job的具体来源
结合你的代码流程,另外两个Job的触发原因基本是这两种情况:
- 停用词加载时的行动算子
如果你是用Spark读取停用词文件(比如sc.textFile("stopwords.txt")),然后调用collect()把它转成本地集合再用于过滤,这个collect()就是行动算子,会触发第一个Job。这是新手常踩的坑——加载依赖数据时不小心触发了执行。 - sortBy的全局排序采样Job
sortBy要做全局排序,底层依赖sortByKey实现。Spark为了确定每个排序分区的key范围,会先跑一个采样Job:对数据采样统计,算出分区边界,才能保证全局有序。这个采样操作会生成第二个Job。 - take触发的最终计算Job
你已经知道的take(25)是行动算子,触发第三个Job,执行从读数据到词频统计、排序的完整流程,返回前25个结果。
快速自查
如果你的停用词是硬编码的本地列表(不是从Spark读取后转的),那第二个Job肯定是sortBy的采样流程。可以检查代码里有没有take之外的其他行动算子(比如collect()、count()、saveAsTextFile()),这些都是Job的触发源。
内容的提问来源于stack exchange,提问作者sumanth kumar
相关产品推荐
相关产品推荐

