如何在PySpark中查看Delta Lake MERGE语句的执行计划?
查看Delta Lake MERGE操作执行计划的方法
针对你使用Python 3.10、delta-spark 2.4.0的场景,要获取MERGE操作等效于explain(mode="extended")的执行计划,有两种实用方案:
方案1:利用DeltaMergeBuilder的explain()方法
Delta Lake的DeltaMergeBuilder(即调用merge()后返回的对象)自带explain()方法,支持指定输出模式,用它替代execute()就能查看完整计划,且不会实际执行MERGE操作。
修改代码如下:
df = spark.sql("SELECT * FROM table") tablePath = "/path/to/deltalake" tbl = DeltaTable.forPath(spark, tablePath) # 替换execute()为explain(),指定extended模式输出完整计划 tbl.alias("target") \ .merge( source=df.alias("source"), condition=condition) \ .whenMatchedUpdateAll() \ .whenNotMatchedInsertAll() \ .explain(mode="extended")
该方法会直接打印出MERGE操作的逻辑计划与物理计划,效果和DataFrame的explain(mode="extended")完全一致。
方案2:转为SQL语句后查看计划
若方案1存在版本兼容问题,可手动构造MERGE SQL语句,通过Spark SQL的explain()查看计划:
# 先将源DataFrame注册为临时视图 df.createOrReplaceTempView("source_view") # 构造Delta Lake的MERGE SQL并查看计划 spark.sql(f""" MERGE INTO delta.`{tablePath}` target USING source_view source ON {condition} WHEN MATCHED THEN UPDATE SET * WHEN NOT MATCHED THEN INSERT * """).explain(mode="extended")
内容的提问来源于stack exchange,提问作者kermatt
相关产品推荐
相关产品推荐

