#python #pandas #amazon-s3 #dask
#python #pandas #amazon-s3 #dask
Вопрос:
У меня есть dasaset с 200 Тыс. файлов в день, эти файлы довольно маленькие .txt.gz
, где 99% меньше 60 КБ. Некоторые из этих файлов являются пустыми файлами размером 20 из-за сжатия gzip.
Когда я пытаюсь загрузить весь каталог с помощью dask, я получаю pandas.errors.EmptyDataError
. Поскольку я планирую загружать это непосредственно из S3 каждый день, мне интересно, могу ли я игнорировать или пропускать эти файлы через dd.read_csv()
. Я не нашел ни одной опции для управления обработкой ошибок в документации для dask read_csv()
и pandas read_csv()
.
Конечно, я могу скопировать все файлы с s3 на локальный жесткий диск и отсканировать и удалить все файлы-нарушители перед загрузкой в Dask, но это будет медленнее (копирование всех файлов 200k).
В принципе, я просто хочу загрузить все эти 200 Тыс. CSV-файлов в Dask, чтобы преобразовать их в меньшее количество файлов parquet. Так что я даже не уверен, что Dask — лучший инструмент для этого, но если есть простой способ заставить его работать, я
Комментарии:
1. Зачем вам pandas / dask для того, что можно сделать с помощью инструментов ОС?
2. Я думаю, что это уже в операционной системе, я не хочу копировать 200k файлов с S3 на локальный диск, так как делать это (параллельно) нетривиально. Это также будет медленнее, как я уже сказал, но также мне не нравится дополнительная сложность другого инструмента для копирования файлов и сценариев для удаления этого конкретного типа ошибок, если это можно сделать напрямую с Dask.
Ответ №1:
Возможный способ сделать это — с помощью исключений:
import pandas.io.common
for i in range(0,len(file_paths)):
try:
pd.read_csv(file_paths[i])
except pandas.io.common.EmptyDataError:
print file_paths[i], " is empty"