You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark动态分区裁剪(DPP)不生效:两种Join场景的差异排查

Spark Iceberg场景下动态分区裁剪(DPP)生效差异问题

问题概述

使用Iceberg作为存储层时,大表T0与小表T1关联时出现动态分区裁剪(DPP)生效异常:直接关联广播后的T1时DPP不触发,但将T1数据收集到本地再重新构造DataFrame后关联,DPP正常生效。

场景1:DPP未生效的实现

df = spark.table('T0').select('A', 'B', 'C')
df1 = spark.table('T1').select('A')
df.join(F.broadcast(df1), ['A']).explain()

对应的执行计划关键片段:

BatchScan[...] T0 [filters=] RuntimeFilters: []

场景2:DPP生效的实现

values = [_.A for _ in df1.select('A').collect()]
values_type = ArrayType(StringType())
df2 = spark.createDataFrame([values], values_type).select(F.explode('value').alias('A'))
df.join(F.broadcast(df2), ['A']).explain()

对应的执行计划关键片段:

BatchScan[...] T0 [filters=] RuntimeFilters: [dynamicpruningexpression(A#5172 IN dynamicpruning#10343)]

已排查内容

  • 排除了小表T1的nullable属性影响:分别验证nullable = true和nullable = false两种情况,均无法触发DPP。

核心疑问

为什么两种关联方式会导致DPP生效情况不同?


内容的提问来源于stack exchange,提问作者Alex Loo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:15:54