чтение разделенного набора данных в 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)