我正在尝试使用Dask通过Jupyter笔记本在笔记本电脑上的大于内存的数据集上工作。数据在Amazon-s3存储桶中存储为许多csv文件。
第一个单元格运行很快,我可以按预期在端口8787上查看Dask仪表板。
from dask.distributed import Client
import dask.dataframe as dd
client = Client()
client
第二个单元格在55.1秒内执行,这对我来说很奇怪,因为它实际上没有提取任何数据。
df = dd.read_csv('s3://*/*/*.csv', assume_missing=True)
在我在仪表板的“任务流”中看到任何内容之前,第三个单元悬挂了11分钟,但随后它按预期方式工作,总共执行了13m 3s。
df['timestamp']=dd.to_datetime(df['timestamp'], unit='ms')
df = df.set_index('timestamp')
df = client.persist(df)
这在精神上似乎与Dask Distributed client takes to long to initialize in jupyter lab类似,但是我的客户开始运作良好,并且最终一切正常。我是否缺少明显的东西?谢谢!
答案 0 :(得分:0)
当然,您可以运行探查器以找出确切需要花费时间。即使调度程序也具有概要分析信息,尽管不易访问。
有可能需要花时间扫描S3上许多文件的所有文件信息。 Dask必须列出所有这些文件,以查明它们的大小并分配要读取的块,这需要许多缓慢的HTTP调用。
这反过来会产生大量任务,正如您所发现的。任务的总图必须序列化并发送到调度程序,才能执行,然后由调度程序处理并发送给工作人员。图形越大,这些成本加起来就越多。
简而言之,如果您要优化数据吞吐率,则最好将传入的数据划分为更大的块。您将看到有关100MB数据块大小的一些建议。