给定一个 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 中概述的页面相关信息(页面标题、重复级别、定义级别和值) ?
注意:我对此很感兴趣,想了解 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/