Есть ли способ заставить dask read_csv игнорировать пустые файлы?

#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"