对于大文件,s3上的dask read_csv超时
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
,而不是本地代码,但我不知道怎么做。在
以下是堆栈跟踪的一部分:
File "/opt/conda/lib/python3.6/site-packages/dask/bytes/utils.py", line 238, in read_block File "/opt/conda/lib/python3.6/site-packages/s3fs/core.py", line 1333, in read File "/opt/conda/lib/python3.6/site-packages/s3fs/core.py", line 1303, in _fetch File "/opt/conda/lib/python3.6/site-packages/s3fs/core.py", line 1520, in _fetch_range File "/opt/conda/lib/python3.6/site-packages/botocore/response.py", line 81, in read botocore.exceptions.ReadTimeoutError: Read timeout on endpoint URL: "None"
使用class属性设置超时似乎是一件合理的事情,但是您使用的是一个客户端与其他进程/计算机中的工作人员进行对话。因此,您需要在每个worker上的类副本上设置属性,以使您的方法生效。在
也许,更好的方法是将
read_csv
(默认为64MB)使用的块大小设置为较小的数字。我假设你在一个较慢的网络上,这就是为什么你得到超时。如果您需要小于5MB的数字(s3fs中的默认预读大小),那么您还应该在传递给storage_options
的storage_options
之间传递default_block_size
最后请注意,s3fs和dask都允许在连接错误或一般任务错误时重试。这可能足以帮助你,如果你只得到这个偶尔的滞后准备。在
相关问题 更多 >
编程相关推荐