单Spark Action触发多作业?Databricks+Snowflake作业命名与UI疑问
问题1解答
你提到的3个作业并不是对应「拉取数据/转换/上传」三个拆分步骤,本质上都由你最终写入Snowflake这1个Action触发,拆分出3个作业是2个原因:
- Snowflake官方Spark连接器的内置逻辑:写入前会先触发1个轻量作业做元数据校验、schema兼容性校验;写入时会先把计算结果落为临时文件到中间存储,再触发1个作业将临时文件同步到Snowflake服务端
- 你代码中的排序操作属于宽依赖,会触发Shuffle,Spark执行引擎会自动将Shuffle前后的逻辑拆分为独立作业
你之前设置的Step Snowflake Reader描述未生效的核心原因是:Spark读操作是懒加载的,你设置描述时没有对应的Action触发作业,所有作业实际触发是在执行写操作的阶段,此时读取阶段设置的描述早已被后续写阶段的描述覆盖,所以所有作业都显示Writer名称。
问题2解答
所有作业关联同一个SQL查询是因为:从你读取Snowflake数据、做转换、排序到写入的整个逻辑,会被Spark生成一份统一的逻辑执行计划,拆分出来的3个作业都属于这份执行计划的不同执行阶段,Spark UI默认会将同一份逻辑计划衍生的所有作业都关联到同一个SQL查询条目下。
问题3解答
关联0个作业的Query 0是Spark会话初始化阶段、或者你定义读取逻辑(未触发Action)时生成的未执行逻辑计划占位符,仅生成了查询计划但没有实际触发计算执行,所以没有关联任何作业。
内容的提问来源于stack exchange,提问作者Gohmz
相关产品推荐
相关产品推荐

