You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark中调用一次show() Action为何生成两个Job?

Spark Job 常见疑问解析

测试数据(CSV)

empid,empname,empsal,empdept,empblock
1,abc,2000,cse,A
2,def,1000,ece,C
3,ghi,8000,eee,D
4,jkl,4000,ece,B
5,mno,3000,itd,F
6,pqr,6000,mec,C

执行现象

  • 执行以下CSV读取代码时,尽管这不是Action操作,但Spark UI中仍会生成一个Job,目的是确定列名:
    df1=spark.read.format("csv").option("header",True).load('csv_file_location')
    
  • 执行以下转换操作时,不会生成任何Job(Spark转换为懒加载模式,仅记录逻辑执行计划):
    x=df1.groupBy("empblock").agg(avg("empsal").alias("avgsal")).filter(col("avgsal")>2000).orderBy("empblock")
    
  • 执行x.show()这个Action时,会生成两个Job,和“一次Action对应一个Job”的常规认知不符。

问题解答

为什么一次Action会生成多个Job?

核心原因是**orderBy全局排序操作触发了额外Job**。

Spark的全局排序需要先对数据做全局洗牌,为保证排序正确性,会拆分两步执行:第一个Job完成聚合、过滤逻辑,生成中间结果并收集数据分布的统计信息;第二个Job基于这些统计信息完成全局排序,最终将结果返回给show()。这两步对应两个独立的Job。

Job数量是否不依赖Action的调用次数?

是的,Job数量不完全由Action调用次数决定。

Spark的Job生成逻辑取决于完成Action所需的独立计算阶段数。除了全局排序,像动态分区插入时的分区发现、部分复杂多阶段转换组合,都可能让单个Action触发多个Job。本质上,Job数量由计算所需的独立执行阶段决定,而非Action的调用次数。


内容的提问来源于stack exchange,提问作者Cassius Clay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:37:39