【发布时间】:2017-05-29 15:15:39
【问题描述】:
我使用下面的代码序列
val obs = spark.read.parquet("s3://xxxx/parquettests/by_pat/")
val single = obs.filter($"pat" === "abcd")
single.explain
然后我得到一个带有谓词下推的执行计划
+- Filter (isnotnull(pat#930) && (pat#930 = abcd))
+- FileScan parquet PartitionFilters: [],
PushedFilters: [IsNotNull(pat), EqualTo(pat,abcd)]
这个(200个文件,每个3MB,用“pat”进行哈希分区)的执行时间是32秒。
鉴于 pat=abcd 仅包含在单个文件中,即读取 3MB 文件加上跳过所有其他文件需要 32 秒。听起来很多。
我检查了这些文件中的 parquet-tools 并显示 PLAIN_DICTIONARY 列,两页均为“RLE:BIT_PACKED VLE:PLAIN [more] VC:21400”。
因此我怀疑字典压缩会回退到 PLAIN,但我不确定,我所有的改变都没有奏效。
想法?
【问题讨论】:
标签: apache-spark