【问题标题】:Understanding Parquet File's metadata information printed with parquet-tools "meta" command了解使用 parquet-tools “meta”命令打印的 Parquet File 的元数据信息
【发布时间】:2020-09-25 03:21:50
【问题描述】:

我正在学习 Parquet File 的内部表示,所以我通过 Apache Parquet 的 Github page、Google Dremel 的 paper 了解定义和重复级别以及 Twitter 的 blog 了解有关 Parquet 文件的更多信息。

为了将我通过阅读获得的对其表示的理解与实际 Parquet 文件表示联系起来,我使用 parquet-tools 命令和 meta 选项作为示例 Parquet 文件之一,它打印了包含 3 个主要部分的详细信息,标头、文件架构和 Row_groups。我理解了前 2 部分中提供的详细信息,但我无法完全理解行组部分中的所有详细信息。

以下是我的问题。

  1. 想了解更多关于DOFPOVC(这看起来像是当前行组中所有行的计数)的信息。可以在 parquet-tools Github page 中找到它所代表的扩展,但我想了解更多关于它的详细信息。我知道SZST 是什么。
  2. ENC 旁边,我看到了BIT_PACKEDPLAINRLE 等编码方案列表。我单独理解它的含义,但我不明白为什么一直使用至少 3 种编码方案。
  3. 在行组的记录计数RC 和总大小TS 旁边,我看到OFFSET。对于第一页,它总是 4。它是如何计算的?
  4. 我知道Parquet文件的页眉和页脚有4位魔术码“PAR1”,有什么特殊含义吗?或者只是一些任意文本来确定文件是否为 Parquet(不取决于文件扩展名)。

很遗憾,由于安全限制,我无法附加 parquet-tools meta 命令输出的 sn-p,但我希望在每个问题中可视化我的意思不会太多。

【问题讨论】:

    标签: apache-spark parquet dremel


    【解决方案1】:

    这个页面有我找到的最好的描述: https://github.com/apache/parquet-mr/tree/master/parquet-tools-deprecated

    所以看起来 tat DO,FPO 只是这个特定列的值开始的偏移量信息。 VC = 现有非空值的值计数。

    使用 pandas 创建 Parquet 文件

    import pandas as pd
    
    df = pd.DataFrame({
        'w1': ["John", "Max", "Hans"],
        'w2': ["Doe", "Mustermann", "Peter"],
        'w3': ["New York", "Berlin", "München"],
        'w4': [1990, 1980, 1970]})
    
    
    df.to_parquet('./test_pandas.lz4.parquet', compression="lz4")
    

    parquet-tools.jar 的元输出与java -jar ./parquet-tools-1.10.1.jar meta <file>

    file schema: schema
    --------------------------------------------------------------------------------
    w1:          OPTIONAL BINARY O:UTF8 R:0 D:1
    w2:          OPTIONAL BINARY O:UTF8 R:0 D:1
    w3:          OPTIONAL BINARY O:UTF8 R:0 D:1
    w4:          OPTIONAL INT64 R:0 D:1
    
    row group 1: RC:3 TS:440 OFFSET:4
    --------------------------------------------------------------------------------
    w1:           BINARY LZ4 DO:4 FPO:51 SZ:98/79/0.81 VC:3 ENC:PLAIN_DICTIONARY,RLE,PLAIN ST:[min: Hans, max: Max, num_nulls: 0]
    w2:           BINARY LZ4 DO:165 FPO:219 SZ:106/87/0.82 VC:3 ENC:PLAIN_DICTIONARY,RLE,PLAIN ST:[min: Doe, max: Peter, num_nulls: 0]
    w3:           BINARY LZ4 DO:337 FPO:394 SZ:115/97/0.84 VC:3 ENC:PLAIN_DICTIONARY,RLE,PLAIN ST:[min: Berlin, max: New York, num_nulls: 0]
    w4:           INT64 LZ4 DO:524 FPO:565 SZ:121/109/0.90 VC:3 ENC:PLAIN_DICTIONARY,RLE,PLAIN ST:[min: 1970, max: 1990, num_nulls: 0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2016-07-08
      • 2016-06-24
      • 2021-06-19
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      相关资源
      最近更新 更多