了解用 parquet-tools“meta”命令打印的 Parquet 文件的元数据信息

Ven*_*pan 5 apache-spark parquet dremel

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

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

以下是我的问题。

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

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

wob*_*obu 0

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

\n

因此,DO、FPO 似乎只是该特定列的值开始的偏移信息。VC = 现有非空值的值计数。

\n

使用 pandas 创建 Parquet 文件

\n
import pandas as pd\n\ndf = pd.DataFrame({\n    \'w1\': ["John", "Max", "Hans"],\n    \'w2\': ["Doe", "Mustermann", "Peter"],\n    \'w3\': ["New York", "Berlin", "M\xc3\xbcnchen"],\n    \'w4\': [1990, 1980, 1970]})\n\n\ndf.to_parquet(\'./test_pandas.lz4.parquet\', compression="lz4")\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
file schema: schema\n--------------------------------------------------------------------------------\nw1:          OPTIONAL BINARY O:UTF8 R:0 D:1\nw2:          OPTIONAL BINARY O:UTF8 R:0 D:1\nw3:          OPTIONAL BINARY O:UTF8 R:0 D:1\nw4:          OPTIONAL INT64 R:0 D:1\n\nrow group 1: RC:3 TS:440 OFFSET:4\n--------------------------------------------------------------------------------\nw1:           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]\nw2:           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]\nw3:           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]\nw4:           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]\n
Run Code Online (Sandbox Code Playgroud)\n