Spark下推滤波器无隔板柱性能

s8vozzvw  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(354)

我有一个关于spark中的过滤的问题,当你没有在过滤器中包含分区列时。
假设我有以下按日期划分的数据:

path/date=20200721/part-0000.parquet
                   part-0001.parquet
                   part-0002.parquet
path/date=20200722/part-0000.parquet
                   part-0001.parquet
                   part-0002.parquet
...

数据有一列名为“action”,其中大约30%的数据值为0,其余的数据值为1
如果我运行以下命令:

spark.read.parquet("s3a://path").filter("action = 0")

spark是否必须列出并扫描源中位于“路径”中的所有文件?或者有一些下推过滤到位?或者spark只在筛选器中存在分区列的情况下应用下推筛选器?
谢谢。

vd8tlhqk

vd8tlhqk1#

1.spark是否必须列出并扫描源中位于“路径”中的所有文件? Yes ,因为您没有对分区列spark list进行过滤并扫描所有文件
2.是否存在下推过滤?
会有的 pushdown filter 读取时应用于每个文件
3.spark仅适用于过滤器中存在分隔柱的下推过滤器? No ,分区过滤器将应用于存在分区列的位置,否则将在扫描文件时应用 predicate 下推。 partition filter vs pushdown filter 您可以通过检查spark中的explain plan来检查所有这些细节 .explain(true) 检查过滤器是否按下 enabled or not :

spark.sql("set spark.sql.parquet.filterPushdown").show(10,false)
//+--------------------------------+-----+
//|key                             |value|
//+--------------------------------+-----+
//|spark.sql.parquet.filterPushdown|true |
//+--------------------------------+-----+

相关问题