首页 > 解决方案 > 了解使用 parquet-tools “meta”命令打印的 Parquet File 的元数据信息

问题描述

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

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

以下是我的问题。

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

不幸的是,由于安全限制,我无法附上parquet-tools meta命令输出的片段,但我希望在每个问题中可视化我的意思不会太多。

标签: apache-sparkparquetdremel

解决方案


这个页面有我发现的最好的描述: 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]

推荐阅读