【发布时间】:2020-01-11 08:50:14
【问题描述】:
虽然“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”后,相同的代码 sn-p 大约需要 30 秒。 奇怪的是物理计划是一样的。
所以我查看了 SparkUI 的“阶段”部分,输入大小的数量不同。
spark.conf.set("spark.sql.orc.filterPushdown", false)
spark.conf.set("spark.sql.orc.filterPushdown", true)
所以我觉得即使PushedFilters在Physical中填充了一些参数(不是空的)也可以读取orc文件,这并不意味着Spark实际上会执行下推谓词/过滤器?
或者有没有我遗漏的一点?
【问题讨论】:
标签: scala apache-spark apache-spark-sql orc