gpt4 book ai didi

scala - Spark Filter/Predicate Pushdown 是否在 ORC 文件中没有按预期工作?

转载 作者:行者123 更新时间:2023-12-04 15:40:53 27 4
gpt4 key购买 nike

虽然“spark.sql.orc.filterPushdown”等于 false(默认情况下)。以下语句需要 3 分钟才能执行。

val result = spark.read.schema(schema).orc("s3a://......./*")
result.select("a","b").where(col("a")===1318138224).explain(extended = true)
result.select("a","b").where(col("a")===1318138224).show()

在实际计划中它说; PushedFilters: [IsNotNull(a), EqualTo(a,1318138224)]

因此,即使通过查看“PushedFilters”语句默认禁用“filterPushdown”,我认为 spark 会以某种方式下推过滤器。

但是在将 spark.sql.orc.filterPushdown 设置为“true”后,相同的代码片段大约需要 30 秒。 奇怪的是物理计划是相同的

所以我查看了 SparkUI 的“阶段”部分,发现输入大小的数量不同。

spark.conf.set("spark.sql.orc.filterPushdown", false) spark.conf.set("spark.sql.orc.filterPushdown", false)

spark.conf.set("spark.sql.orc.filterPushdown", true) spark.conf.set("spark.sql.orc.filterPushdown", true)

所以我想读取 orc 文件,即使 Physical 的 PushedFilters 填充了一些参数(非空),这并不意味着 Spark 实际上会执行下推谓词/过滤器?

还是我遗漏了什么?

最佳答案

查询计划不受 filterPushdown 配置的影响(对于 parquet 或 orc)。 Spark 始终尝试将过滤器推送到源。配置控制是否允许源应用数据跳过。有时即使配置设置为 true,在某些情况下也可能不会发生数据跳过(由于错误,或列统计信息不正确或类型不受支持)。

您还可以在 web ui 的 SQL 选项卡中检查“输出行数”。

谓词下推&分区剪枝后读取的行数。

Scan parquet

number of files read: 1
scan time total (min, med, max )
18.7 s (12 ms, 214 ms, 841 ms )
metadata time: 0 ms
size of files read: 783.9 MiB
number of output rows: 100,000,000

关于scala - Spark Filter/Predicate Pushdown 是否在 ORC 文件中没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57856511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com