apache-spark - 了解使用 parquet-tools “meta”命令打印的 Parquet File 的元数据信息
问题描述
我正在学习 Parquet File 的内部表示,所以我通过 Apache Parquet 的 Github页面、Google Dremel 的论文了解定义和重复级别以及 Twitter 的博客以了解有关 Parquet 文件的更多信息。
为了将我通过阅读获得的对它的表示的理解与实际的 Parquet 文件表示联系起来,我使用parquet-tools
带有meta
选项的命令作为示例 Parquet 文件之一,它打印了包含 3 个主要部分的详细信息,标题、文件模式和 Row_groups。我理解了前 2 部分中提供的细节,但我无法完全理解行组部分中的所有细节。
以下是我的问题。
- 想了解更多关于什么
DO
,FPO
,VC
(这看起来像当前行组中所有行的计数)是什么。可以在 parquet-tools Github页面中找到它所代表的扩展,但我想了解更多关于它的详细信息。我明白什么SZ
和ST
是什么。 - 在我旁边,
ENC
我看到了编码方案列表,如BIT_PACKED
,PLAIN
,RLE
。我单独理解它的含义,但我不明白为什么一直使用至少 3 种编码方案。 - 在行组的记录计数
RC
和总大小旁边,我看到. 对于第一页,它总是 4。是怎么计算的?。TS
OFFSET
- 我知道 Parquet 文件的页眉和页脚有 4 位魔术代码为“PAR1”,它有什么特殊含义吗?或者只是一些任意文本来确定文件是否为 Parquet(不取决于文件扩展名)。
不幸的是,由于安全限制,我无法附上parquet-tools meta
命令输出的片段,但我希望在每个问题中可视化我的意思不会太多。
解决方案
这个页面有我发现的最好的描述: 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]
推荐阅读
- java - Android片段没有膨胀
- mysql - 多个表上的多个排序字段,无需连接 sql
- reactjs - 尝试使用样式组件时出现 Webpack 错误
- php - 仅当购物车中的每个产品都属于同一类别时才分配 var
- javafx - 如何刷新 JavaFX 中的选择框?
- javascript - 与 Map 一起使用后,Array 过滤器函数的行为发生了变化
- java - 移动应用程序仿真能够连接到在线应用程序服务,但不能在实际设备上运行
- angular - Angular获取选定的让值
- python - 在本地同步 aws s3 存储桶(连同文件夹结构)并仅在新添加的本地文件夹上运行 python 代码
- bootstrap-4 - 外部输入时隐藏的简单表单和引导错误?