dask read_csv timeout на Amazon s3 с большими файлами - PullRequest
0 голосов
/ 30 декабря 2018

dask read_csv timeout на s3 для больших файлов

s3fs.S3FileSystem.read_timeout = 5184000  # one day
s3fs.S3FileSystem.connect_timeout = 5184000  # one day

client = Client('a_remote_scheduler_ip_here:8786')

df = dd.read_csv('s3://dask-data/nyc-taxi/2015/*.csv')
len(df)

len(df) имеет исключение тайм-аута, если файл маленький, то он просто работает хорошо.

Я думаю, что нам нуженспособ установить s3fs.S3FileSystem.read_timeout на удаленных рабочих, а не локальный код, но я не знаю, как это сделать.

Вот часть трассировки стека:

Файл "/opt/conda/lib/python3.6/site-packages/dask/bytes/utils.py", строка 238, в файле read_block "/opt/conda/lib/python3.6/site-packages/s3fs/core.py ", строка 1333, в файле для чтения" /opt/conda/lib/python3.6/site-packages/s3fs/core.py ", строка 1303, в файле _fetch" / opt / conda / lib / python3.6 / site-packages / s3fs / core.py ", строка 1520, в файле _fetch_range" /opt/conda/lib/python3.6/site-packages/botocore/response.py ", строка 81, в файле read botocore.exceptions.ReadTimeoutError: Время ожидания чтения по URL-адресу конечной точки: «Нет»

1 Ответ

0 голосов
/ 30 декабря 2018

Установка времени ожидания с помощью атрибута класса кажется разумной, но вы используете клиент, который общается с работниками в других процессах / машинах.Поэтому вам необходимо установить атрибут на копиях класса на каждом работнике, чтобы ваш метод вступил в силу.

Возможно, лучше было бы установить размер блока, используемый read_csv (64MBпо умолчанию) на меньшее число.Я предполагаю, что вы находитесь в более медленной сети, и именно поэтому вы получаете тайм-ауты.Если вам нужны числа менее 5 МБ, размер чтения по умолчанию в s3fs, то вы также должны передать default_block_size среди storage_options, переданных read_csv

Обратите внимание, наконец, что и s3fs, и dask допускают повторные попыткина ошибки подключения или общие ошибки задачи.Этого может быть достаточно, чтобы помочь вам в том случае, если вы получите его только на случайное отставание.

...