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
的方法,而不是在本地代码上进行设置,但是我不知道该怎么做。
这是堆栈跟踪的一部分:
文件“ /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行,已读取 _fetch中的文件“ /opt/conda/lib/python3.6/site-packages/s3fs/core.py”,行1303 _fetch_range中的文件“ /opt/conda/lib/python3.6/site-packages/s3fs/core.py”,第1520行 文件“ /opt/conda/lib/python3.6/site-packages/botocore/response.py”,第81行,处于读取状态 botocore.exceptions.ReadTimeoutError:在端点URL上读取超时:“无”
答案 0 :(得分:0)
使用class属性设置超时似乎是一件合理的事情,但是您正在使用客户端与其他进程/机器中的工作人员进行对话。因此,您需要在每个工作程序的类副本上设置属性,以使方法生效。
也许更好的办法是将read_csv
使用的块大小(默认为64MB)设置为较小的数字。我认为您的网络速度较慢,这就是为什么您超时的原因。如果您需要小于5MB的数字(即s3fs中的默认预读大小),则还应该在传递给default_block_size
的{{1}}中传递storage_options
最后,请注意,s3fs和dask都允许在连接错误或常规任务错误时重试。如果您只是为偶尔的懒散准备而准备了这笔钱,这可能足以为您提供帮助。