Databricks 运行时升级后 ETL 变慢

问题描述 投票:0回答:1

我们正在升级 Databricks 平台。 几周前我们设置了 Unity Catalog。

现在我们正在尝试从 Databricks Runtime 13.3 LTS 升级到 15.4 LTS。 我们运行的两台笔记本电脑(超过 40 台)花费了 3 倍的时间(30 分钟到 1.5 小时)。 我们尝试了 DR 16.0,结果相同。

然后我们回滚到 Databricks Runtime 14.3 LTS,事情变得更快了。

我们曾经在 Standard_DS3_v2 和 Standard_DS4_v2 上运行所有内容。 我们还切换到 Standard_D8ads_v5(因为它们支持增量缓存)。 这也提高了一点速度。

  • 什么可能导致 Databricks 运行时之间的性能如此不同?

我想知道延迟评估在版本之间的工作方式不同。 我们经常指望通过执行以下操作来具体化数据框:

df.cache()
rc = df.count()

想法是,如果稍后多次引用 dataframe,它将只执行一次。

  • 我想知道这个技巧是否不再起作用,并且在后面的步骤中它是否会一次又一次地重新运行所有内容。

今天,这个进程只在增量表中写入 5700 行。 我们做的事情之一是在写入之前使用合并(1)(文件无论如何都非常小)。

  • 这个步骤现在怎么可能需要 10 分钟(在 DBR14.3 上)?它是否从头开始重新运行所有内容(忽略之前的数据帧缓存)?
pyspark azure-databricks lazy-evaluation
1个回答
0
投票

启用 Photon 可以提高查询的性能,特别是对于连接和写入等操作。

要启用 Photon,您可以使用以下命令:

spark.conf.set("spark.databricks.photon.enabled", "true")

正如您提到的,您正在使用

df.cache()
coalesce(1)

您可以使用以下方法使用持久数据帧而不是缓存。

transformed_df.persist()
transformed_df.count()

然后您可以使用使用优化的文件压缩 写入 Delta 表后,使用

OPTIMIZE
命令压缩文件:

spark.sql(f"""
OPTIMIZE delta.`{delta_table_path}`
""")

我同意@JayashankarGS,你可以使用

df.explain(extended=True)
来调试性能问题,查询很慢。 还要了解 Databricks Runtime 版本中执行计划的差异。 并验证您的转换是否应用了优化示例过滤器。

enter image description here

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.