Я ищу способы чтения данных из нескольких секционированных каталогов из s3 с помощью python.
data_folder/время_в_числовом_формате = 1/cur_date = 20-12-2012/abcdsd0324324.snappy.parquet data_folder/время_в_числовом_формате = 2/cur_date = 27-12-2012/asdsdfsd0324324.snappy.parquet
pyarrow Модуль ParquetDataset имеет возможность читать из разделов. Поэтому я попробовал следующий код:
>>> import pandas as pd
>>> import pyarrow.parquet as pq
>>> import s3fs
>>> a = "s3://my_bucker/path/to/data_folder/"
>>> dataset = pq.ParquetDataset(a)
Выбросила следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/my_username/anaconda3/lib/python3.6/site-packages/pyarrow/parquet.py", line 502, in __init__
self.metadata_path) = _make_manifest(path_or_paths, self.fs)
File "/home/my_username/anaconda3/lib/python3.6/site-packages/pyarrow/parquet.py", line 601, in _make_manifest
.format(path))
OSError: Passed non-file path: s3://my_bucker/path/to/data_folder/
Основываясь на документации pyarrow, я попытался использовать s3fs в качестве файловой системы, то есть:
>>> dataset = pq.ParquetDataset(a,filesystem=s3fs)
Что вызывает следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/my_username/anaconda3/lib/python3.6/site-packages/pyarrow/parquet.py", line 502, in __init__
self.metadata_path) = _make_manifest(path_or_paths, self.fs)
File "/home/my_username/anaconda3/lib/python3.6/site-packages/pyarrow/parquet.py", line 583, in _make_manifest
if is_string(path_or_paths) and fs.isdir(path_or_paths):
AttributeError: module 's3fs' has no attribute 'isdir'
Я ограничен использованием кластера ECS, поэтому искра /pyspark не вариант.
Есть ли способ легко прочитать файлы паркета легко, в python из таких секционированных каталогов в s3? Я считаю, что перечисление всех каталогов, а затем чтение не является хорошей практикой, как предлагается в этой ссылке. Мне нужно было бы преобразовать прочитанные данные в фреймворк pandas для дальнейшей обработки и, следовательно, отдать предпочтения параметрам, связанным с fastparquet или pyarrow. Я также открыт для других вариантов в python.