PyArrow получает метаданные из файла в S3

#parquet #pyarrow

#parquet #pyarrow

Вопрос:

Я хочу получить статистику файла Parquet (например, Min / Max) из файла в S3 с помощью PyArrow. Я могу получить его с помощью

 pq.ParquetDataset(s3_path, filesystem=s3)
  

и получает статистику, если я загружаю и читаю ее с помощью:

 ParquetFile(full_path).metadata.row_group(0).column(col_idx).statistics
  

надеюсь, есть способ добиться этого без загрузки всего файла.

Спасибо

Ответ №1:

Я пришел к этому сообщению в поисках аналогичного ответа несколько дней назад. В конце концов я нашел простое решение, которое работает для меня.

 import pyarrow.parquet as pq
from pyarrow import fs

s3_files = fs.S3FileSystem(access_key) # whatever need to connect to s3

# fetch the dataset
dataset = pq.ParquetDataset(s3_path, filesystem=s3_files)

metadata = {}
for fragment in dataset.fragments:
    meta = fragment.metadata
    metadata[fragment.path] = meta
    print(meta)
  

Метаданные хранятся в словаре, где ключи — это путь к фрагменту в s3, а значения — это метаданные этого конкретного фрагмента.

для доступа к статистике просто используйте

 meta.row_group(0).column(col_idx).statistics
  

что-то вроде этого будет напечатано для каждого фрагмента

 <pyarrow._parquet.FileMetaData object at 0x7fb5a045b5e0>
  created_by: parquet-cpp-arrow version 8.0.0
  num_columns: 6
  num_rows: 10
  num_row_groups: 1
  format_version: 1.0
  serialized_size: 3673