python - 如何使用 pyarrow 获取 parquet 文件的页面级数据?

标签 python parquet pyarrow

给定一个 ParquetFile 对象 ( docs ),我可以使用 read_row_group 或使用 metadata< 在行组/列 block 级别检索数据 属性:

from pyarrow import fs
from pyarrow.parquet import ParquetFile

s3  = fs.S3FileSystem(region='us-east-2')
path = 'voltrondata-labs-datasets/nyc-taxi/year=2009/month=1/part-0.parquet'
source = s3.open_input_file(path)
parquet_file = ParquetFile(source)

# row_group metadata
parquet_file.metadata.row_group(0)
<pyarrow._parquet.RowGroupMetaData object at 0x7f8f5edcda40>
 num_columns: 22
 num_rows: 11624
 total_byte_size: 712185

# column_chunk metadata
parquet_file.metadata.row_group(0).column(0)
<pyarrow._parquet.ColumnChunkMetaData object at 0x7f8f5edcda90>
  file_offset: 1636
  file_path: 
  physical_type: BYTE_ARRAY
  num_values: 11624
  path_in_schema: vendor_name
  is_stats_set: True
  statistics:
    <pyarrow._parquet.Statistics object at 0x7f8f5eb74c20>
      has_min_max: True
      min: CMT
      max: VTS
      null_count: 0
      distinct_count: 0
      num_values: 11624
      physical_type: BYTE_ARRAY
      logical_type: String
      converted_type (legacy): UTF8
  compression: SNAPPY
  encodings: ('PLAIN_DICTIONARY', 'PLAIN', 'RLE')
  has_dictionary_page: True
  dictionary_page_offset: 4
  data_page_offset: 41
  total_compressed_size: 1632
  total_uncompressed_size: 1625

但我不能再进一步了。是否可以获取 parquet docs 中概述的页面相关信息(页面标题、重复级别、定义级别和值) ?

Diagram showing hierarchical components of a parquet file

注意:我对此很感兴趣,想了解 Parquet 文件在幕后的工作原理。我已经查看过内省(introspection)工具(例如 parquet-tools),但它似乎已被弃用,并且替代方案仅提供行组级别信息。

最佳答案

您现在无法在 pyarrow 中访问该信息。 Pyarrow 最初专注于将 parquet 文件转换为 Arrow 表示形式。 Arrow 中没有与页面等效的内容。如果您能够深入研究 C++,这些信息应该可以在 parquet-cpp 中找到(令人困惑的是,该项目也位于 Arrow GitHub 存储库中)。也许可以在其他 Parquet 项目中获得该信息,我对它们不太熟悉。

关于python - 如何使用 pyarrow 获取 parquet 文件的页面级数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75196568/

相关文章:

python - 在单个命令中删除 python-Redis 中的多个键

python - 如何让 Athena/Presto 识别 parquet 索引

python - 在 Pandas DataFrame 中保留 None(尽管有 astype() 和 to_parquet())

python - 带有 pyarrow 的消费者-生产者模式

python - Pyarrow:将流读入 p​​andas 数据帧高内存消耗

python - Pandas Dataframe Parquet 数据类型?

python - 通过 Anaconda 安装 `libm.so.6`

python - 如何在文件浏览器中使用动态模块?

python - 从嵌套 json 文件中删除 python dict 项

json - Flume Agent从Kafka读取并以 Parquet 格式存储数据