来自单个操作的多个作业(读取、转换、写入)

Multiple jobs from a single action (Read, Transform, Write)

目前在 Databricks Interactive Cluster 上使用 PySpark(使用 Databricks-connect 提交作业)和 Snowflake 作为 Input/Output 数据。

我的 Spark 应用程序应该从 Snowflake 读取数据,应用一些简单的 SQL 转换(主要是 F.when.otherwise,窄转换),然后加载它回到雪花。 (仅供参考,模式传递给 Snowflake reader & writer)

编辑:在流程结束时,在写入之前还有一个排序转换。

出于测试目的,我将我的工作命名为:(作家和 Reader 应该被命名)

sc.setJobDescription("Step Snowflake Reader")

我无法理解 Spark UI 向我显示的内容:

所以,我得到了 3 个工作,所有工作名称都相同(作家)。 我可以理解我只有一个 Spark Action,所以假设有一份工作,所以 Spark 确实将工作命名为 sc.setJobDescription 设置的最后一个值(Reader,触发 spark 计算)。

我也标记了我的“Reader班级”

sc = spark.sparkContext
sc.setJobDescription("Step Snowflake Reader")

为什么不显示?

是不是第一个作业是“从Snowflake下载数据”,第二个是“应用SQL转换”,然后第三个是“将数据上传到Snowflake”?

为什么我所有的工作都与同一个 SQL 查询相关? 什么是与...零个工作相关的查询 0?

感谢您的帮助。

这里面有几件事。 首先,一个作业是为一个动作触发的,而转换实际上并不是它的一部分(它们是在一个动作期间计算的,但一个动作可以进行多个转换)。 在您的情况下,阅读、转换和排序,所有这些步骤都将在触发 操作时发生

Please note that reading from snowflake doesn't trigger a job (this is an assumption as the same behaviour is exhibited by Hive) because snowflake already has the metadata which spark needs by traversing the files. If you'll read a parquet file directly, it'll trigger a different job, and you'll be able to see the job description.

现在是您为工作命名的部分

sc.setJobDescription("Step Snowflake Reader")

这将命名由您的写入操作触发的作业。而这个动作又会调用多个作业(但仍然是您正在执行的最后一个动作的一部分,请参阅此处了解更多详细信息 see this post

类似地,你在调用一个动作之前所做的最后配置被拾取(同样的事情发生在设置 shufflePartition 例如,你可能想要一个具有或多或少随机播放的特定步骤,但对于 1 个完整操作,它将设置为单个值)

希望这能回答您的问题。