在Jupyter Notebook中进行Dask计算需要很长时间才能初始化

时间:2019-01-16 18:09:10

标签: amazon-s3 jupyter-notebook dask dask-distributed

我正在尝试使用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)

A picture of my dashboard

这在精神上似乎与Dask Distributed client takes to long to initialize in jupyter lab类似,但是我的客户开始运作良好,并且最终一切正常。我是否缺少明显的东西?谢谢!

1 个答案:

答案 0 :(得分:0)

当然,您可以运行探查器以找出确切需要花费时间。即使调度程序也具有概要分析信息,尽管不易访问。

有可能需要花时间扫描S3上许多文件的所有文件信息。 Dask必须列出所有这些文件,以查明它们的大小并分配要读取的块,这需要许多缓慢的HTTP调用。

这反过来会产生大量任务,正如您所发现的。任务的总图必须序列化并发送到调度程序,才能执行,然后由调度程序处理并发送给工作人员。图形越大,这些成本加起来就越多。

简而言之,如果您要优化数据吞吐率,则最好将传入的数据划分为更大的块。您将看到有关100MB数据块大小的一些建议。