[英]dask read_csv timeout on Amazon s3 with big files
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
的方法,但是我不知道该怎么做。
这是堆栈跟踪的一部分:
read_block中的文件“ /opt/conda/lib/python3.6/site-packages/dask/bytes/utils.py”,第238行,文件“ /opt/conda/lib/python3.6/site-packages/s3fs/读取文件“ /opt/conda/lib/python3.6/site-packages/s3fs/core.py”第1303行的_fetch文件“ / opt / conda / lib / python3”中的core.py”行1333。 6 / site-packages / s3fs / core.py”,第1520行,在_fetch_range文件中,“ / opt / conda / lib / python3.6 / site-packages / botocore / response.py”,第81行,已读取botocore.exceptions .ReadTimeoutError:在端点URL上读取超时:“无”
使用class属性设置超时似乎是一件合理的事,但是您正在使用客户端与其他进程/机器中的工作人员进行对话。 因此,您需要在每个工作程序的类副本上设置属性,以使方法生效。
更好的做法可能是将read_csv
使用的块大小(默认为64MB)设置为较小的数字。 我认为您的网络速度较慢,这就是为什么您超时的原因。 如果您需要小于5MB的数字(即s3fs中的默认预读大小),则还应该在传递给read_csv
的storage_options
传递default_block_size
最后请注意,s3fs和dask都允许重试连接错误或常规任务错误。 如果您只是偶尔准备一下就准备好了,这可能就足以为您提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.