Python ec2工人上的dask s3访问

Python ec2工人上的dask s3访问,python,amazon-s3,dask,Python,Amazon S3,Dask,我尝试从s3读取大量csv文件,工作人员使用正确的IAM角色在ec2实例上运行(我可以从其他脚本读取相同的bucket)。 当我尝试使用以下命令从私有存储桶读取我自己的数据时: client = Client('scheduler-on-ec2') df = read_csv('s3://xyz/*csv.gz', compression='gzip', blocksize=None, #storage_opti

我尝试从s3读取大量csv文件,工作人员使用正确的IAM角色在ec2实例上运行(我可以从其他脚本读取相同的bucket)。 当我尝试使用以下命令从私有存储桶读取我自己的数据时:

client = Client('scheduler-on-ec2')
df = read_csv('s3://xyz/*csv.gz',
              compression='gzip',
              blocksize=None,
              #storage_options={'key': '', 'secret': ''}
             )
df.size.compute()
数据看起来像是本地读取的(由本地python解释器读取,而不是由工作程序读取),然后由本地解释器发送给工作程序(或调度程序?),当工作程序收到块时,它们运行计算并返回结果。通过
storage\u options
传递密钥和密码时,无论是否传递,都相同

当我从一个公共s3存储桶(纽约出租车数据)读取数据时,使用
存储选项={'anon':True}
,一切看起来都很正常

您认为问题是什么?我应该重新配置什么更改以使工人直接从s3读取

s3fs安装正确,根据dask,这些是受支持的文件系统:

>>>> dask.bytes.core._filesystems
{'file': dask.bytes.local.LocalFileSystem,
 's3': dask.bytes.s3.DaskS3FileSystem}
更新


监控网络接口后,看起来有东西从解释器上传到了调度程序。数据帧(或包)中的分区越多,发送到调度程序的数据就越大。我以为它可能是计算图,但它真的很大。对于12个文件,它是2-3MB,对于30个文件,它是20MB,对于更大的数据,(150个文件),它只是需要太长的时间来发送到调度程序,我没有等待它。还有什么会被发送到调度程序以占用如此多的数据?

当您调用
dd.read\u csv('s3://…')
时,本地计算机将读取少量数据以猜测列名、数据类型等。。但是,工人将直接读取大部分数据

当使用分布式调度程序时,Dask不会在本地计算机中加载数据,然后将数据输出给工作人员。正如你所建议的,这将是低效的


您可能需要查看以获取有关花费时间的更多信息。

当您调用
dd.read\u csv('s3://…')
时,本地计算机将读取少量数据,以便猜测列名、数据类型等。。但是,工人将直接读取大部分数据

当使用分布式调度程序时,Dask不会在本地计算机中加载数据,然后将数据输出给工作人员。正如你所建议的,这将是低效的


您可能需要查看以获取更多有关所需时间的信息。

是的,我正在查看web诊断页面。当我使用少量CSV并监控我的网络接口时,我看到我的机器正在向ec2上传一些东西,当它完成时,任务开始按预期在workers上运行,显示在diagnostics页面上。在更多CSV上运行时,上载根本没有完成。我不知道发生了什么,只是猜测所有的数据都被上传了,但我不知道引擎盖下到底发生了什么。是的,我检查了网络诊断页面。当我使用少量CSV并监控我的网络接口时,我看到我的机器正在向ec2上传一些东西,当它完成时,任务开始按预期在workers上运行,显示在diagnostics页面上。在更多CSV上运行时,上载根本没有完成。我不确定发生了什么,只是猜测所有的数据都被上传了,但我不知道引擎盖下发生了什么。>还有什么被发送到调度程序,可以接收这么多的数据?据我所知。没有什么。如果你能制作一个可复制的,我建议你在Github上提交一些东西。当我尝试这个问题时,一切都正常。您可以尝试。>还有哪些发送到调度程序的内容会占用这些数据量?据我所知。没有什么。如果你能制作一个可复制的,我建议你在Github上提交一些东西。当我尝试这个问题时,一切都正常。你可以试试。