【问题标题】:How to set Parquet file encoding in Spark如何在 Spark 中设置 Parquet 文件编码
【发布时间】:2018-01-11 07:06:06
【问题描述】:

Parquet 文档描述了几种不同的编码 here

在读/写期间文件内部是否会发生某种变化,或者我可以设置它? Spark 文档中对此一无所知。仅从 Netflix 团队的 Ryan Blue 的演讲中找到 slides。他将 parquet 配置设置为 sqlContext

sqlContext.setConf("parquet.filter.dictionary.enabled", "true")

看起来这与 Parquet 文件中的普通字典编码无关。

【问题讨论】:

  • Spark 提供了预定义的方法来读取/写入镶木地板文件,如果这是您正在寻找的。​​span>
  • 写入时如何设置编码? f.e. dataFrame.write().parquet()

标签: scala apache-spark apache-spark-sql parquet


【解决方案1】:

我不确定我是否理解了您查询的全部范围(在这种情况下,请随时澄清)。

您可以使用“CREATE TABLE src(id int) USING hive OPTIONS(fileFormat 'parquet')”为 hive 表指定存储选项 reference

This one should be easier to follow and more comprehensive

读/写文件: val usersDF = spark.read.load("examples/src/main/resources/users.parquet") usersDF.select("name", "favorite_color").write.save("namesAndFavColors.parquet")

我还假设您可能已经检查过: - sqlContext.parquetFile("File_to_be_read.parquet") - myDataFrame.saveAsParquetFile("file_to_be_saved.parquet")

【讨论】:

  • OP 知道如何创建 parquet 文件,但规范中 parquet 文件有多种可能的编码,想知道这是否可以在 spark 中配置。
【解决方案2】:

所以我在推特工程blog 上找到了我的问题的答案。

当唯一值的数量 Here 是一篇宣布 Parquet 1.0 的帖子,其中包含自调整字典编码

UPD:

可以在 SparkSession 配置中切换字典编码:

SparkSession.builder
            .appName("name")
            .config("parquet.enable.dictionary","false") //true

关于按列编码,有一个开放的issue 作为 Parquet 的 Jira 的改进,它于 17 年 7 月 14 日创建。由于字典编码是默认值并且仅适用于所有表,因此它关闭了 Delta 编码(Jira @987654324 @for this bug),这是唯一适合时间戳等数据的编码,其中几乎每个值都是唯一的。

UPD2

我们如何知道输出文件使用了哪种编码?

  • 我为此使用了镶木地板工具。

    -> brew install parquet-tools (for mac)
    -> parquet-tools meta your_parquet_file.snappy.parquet

输出:

.column_1: BINARY SNAPPY DO:0 FPO:16637 SZ:2912/8114/3.01 VC:26320 ENC:RLE,PLAIN_DICTIONARY,BIT_PACKED
.column_2: BINARY SNAPPY DO:0 FPO:25526 SZ:119245/711487/1.32 VC:26900 ENC:PLAIN,RLE,BIT_PACKED
.

其中 PLAIN 和 PLAIN_DICTIONARY 是用于该列的编码

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 2019-02-24
    • 1970-01-01
    • 2022-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2018-02-05
    相关资源
    最近更新 更多