我们正在升级 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(因为它们支持增量缓存)。 这也提高了一点速度。
我想知道延迟评估在版本之间的工作方式不同。 我们经常指望通过执行以下操作来具体化数据框:
df.cache()
rc = df.count()
想法是,如果稍后多次引用 dataframe,它将只执行一次。
今天,这个进程只在增量表中写入 5700 行。 我们做的事情之一是在写入之前使用合并(1)(文件无论如何都非常小)。
启用 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 版本中执行计划的差异。
并验证您的转换是否应用了优化示例过滤器。