чтение разделенного набора данных в aws s3 с помощью pyarrow не добавляет столбцы разделов

Я пытаюсь прочитать разделенный набор данных в aws s3, это выглядит так:

MyDirectory--code=1--file.parquet
           --code=2--another.parquet
           --code=3--another.parquet

Я создал список_файлов, содержащий путь ко всем файлам в каталоге, затем выполнил

df = pq.ParquetDataset(file_list, filesystem=fs).read().to_pandas()

все работает, за исключением того, что код столбца раздела не существует в df фрейма данных. Я пробовал это также, используя один путь к MyDirectory, вставленный из file_list, но обнаружил ошибку "Найдены файлы в промежуточном каталоге: s3://bucket/Mydirectoty", я не могу найти ответ в Интернете.

Спасибо!

2 ответа

У AWS есть проект (AWS Data Wrangler), который помогает с интеграцией между Pandas/PyArrow и их сервисами.

Этот фрагмент должен работать:

import awswrangler as wr

# Write
wr.s3.to_parquet(
    df=df,
    path="s3://...",
    mode="overwrite",
    dataset=True,
    database="my_databse",  # Optional, only if you want it available on Athena/Glue Catalog
    table="my_table",
    partition_cols=["PARTITION_COL_NAME"])

# READ
df = wr.s3.read_parquet(path="s3://...", dataset=True)

Если вас устраивают другие инструменты, вы можете дать daskпопытка. Предположим, что все данные, которые вы хотите прочитать, находятся вs3://folder вы можете просто использовать

import dask.dataframe as dd
storage_options = {
            'key': your_key,
            'secret': your_secret}
df = dd.read_parquet("s3://folder",
                     storage_options=storage_options)
Другие вопросы по тегам