【问题标题】:Multiple jobs from a single action (Read, Transform, Write)单个操作的多个作业(读取、转换、写入)
【发布时间】:2022-01-07 13:46:46
【问题描述】:

目前在 Databricks Interactive Cluster 上使用 PySpark(使用 Databricks-connect 提交作业)和 Snowflake 作为输入/输出数据。 p>

我的 Spark 应用程序应该从 Snowflake 读取数据,应用一些简单的 SQL 转换(主要是 F.when.otherwise,窄转换),然后将其加载回 Snowflake。 (仅供参考,架构已传递给雪花阅读器和编写器)

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

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

sc.setJobDescription("Step Snowflake Reader")

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

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

我也标记了我的“ReaderClass”

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

为什么不显示?

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

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

感谢您的帮助。

【问题讨论】:

  • 你使用了很多withColumn 吗?
  • @Alex Ott 所有 SQL 转换都是使用“select(col_expression)”完成的。 (不是withColumn,但效果相同)一切都运行良好....输出数据集是我所期望的。我想了解我看到的不同作业是否对应于不同的步骤(读/转换/写)。如果不是,它们是什么。

标签: apache-spark pyspark snowflake-cloud-data-platform databricks spark-ui


【解决方案1】:

这有几件事。 首先,一个作业是针对一个动作触发的,而转换并不是其中的一部分(它们是在一个动作期间计算的,但是一个动作可以进行多个转换)。 在您的情况下,读取、转换和排序,所有这些步骤都将在 动作被触发

时发生

请注意,从雪花读取不会触发作业(这是一个假设,因为 Hive 表现出相同的行为),因为雪花已经具有通过遍历文件来触发所需的元数据。 如果您直接读取 parquet 文件,它将触发不同的作业,并且您将能够看到作业描述。

现在是你命名你的工作的部分

sc.setJobDescription("Step Snowflake Reader")

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

同样,您在调用操作之前所做的最后一个配置会被拾取(设置 shufflePartition 也会发生同样的事情,您可能希望有一个或多或少 shuffle 的特定步骤,但对于 1 个完整的操作,它将被设置为单个值)

希望这能回答你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多