Apache spark 理解拼花地板文件';使用拼花工具打印的s元数据信息“;meta";命令

Apache spark 理解拼花地板文件';使用拼花工具打印的s元数据信息“;meta";命令,apache-spark,parquet,dremel,Apache Spark,Parquet,Dremel,我正在学习拼花文件的内部表示,因此我通过Apache拼花的Github、Google Dremel了解了定义和重复级别,并通过Twitter了解了更多关于拼花文件的信息 为了将我通过阅读获得的对其表示的理解与实际的拼花文件表示联系起来,我对一个示例拼花文件使用了Parquet tools命令和meta选项,它打印了3个主要部分、标题、文件模式和行组的详细信息。我理解前两部分中的细节,但我无法完全理解行组部分中的所有细节 下面是我的问题 想知道更多关于做什么,FPO,VC(这看起来像是当前行组中所

我正在学习拼花文件的内部表示,因此我通过Apache拼花的Github、Google Dremel了解了定义和重复级别,并通过Twitter了解了更多关于拼花文件的信息

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

下面是我的问题

  • 想知道更多关于
    做什么
    FPO
    VC
    (这看起来像是当前行组中所有行的计数)的信息。它代表的扩展可以在拼花工具Github中找到,但我想了解更多细节。我了解什么是
    SZ
    ST
  • ENC
    旁边,我看到了编码方案列表,如
    BIT\u-PACKED
    PLAIN
    RLE
    。我理解它的具体含义,但我不理解为什么总是使用至少3种编码方案
  • 在记录行组的计数
    RC
    和总大小
    TS
    旁边,我看到了偏移量
    OFFSET
    。第一页总是4。它是如何计算的
  • 我知道拼花文件的页眉和页脚有4位数的魔法代码“PAR1”,它有什么特殊的意义吗?或者只是一些仲裁文本来决定文件是否为拼花地板(不取决于文件扩展名)

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

    此页面具有我发现的最佳描述:

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

    使用熊猫创建拼花地板文件

    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")
    
    带有
    java-jar的parquet-tools.jar的Meta输出。/parquet-tools-1.10.1.jar Meta

    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]