【问题标题】:Parquet and predicate pushdown and dictionary compressionParquet 和谓词下推和字典压缩
【发布时间】: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


    【解决方案1】:

    Spark 2.2 和 Parquet 1.8 目前不支持字典编码列的谓词下推。
    最重要的是,您的 parquet 文件太小了,您应该将它们合并为 1 或 2 个文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-18
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 2018-08-15
      • 2020-02-02
      • 2016-08-24
      相关资源
      最近更新 更多