发布数据集

一个 已发布的集合 是对已发布到集群的 Dask 集合或未来列表的命名引用。它对任何客户端都可见,并且超出了单个会话的范围。

发布数据集在以下情况下是有用的:

  • 你想与同事共享计算

  • 您希望在交互式会话之间在集群上持久化结果

激励示例

在这个例子中,我们从S3加载一个dask.dataframe,对其进行操作,然后将结果发布。

连接与加载

from dask.distributed import Client
client = Client('scheduler-address:8786')

import dask.dataframe as dd
df = dd.read_csv('s3://my-bucket/*.csv')
df2 = df[df.balance < 0]
df2 = client.persist(df2)

>>> df2.head()
      name  balance
0    Alice     -100
1      Bob     -200
2  Charlie     -300
3   Dennis     -400
4    Edith     -500

发布

为了与同事共享此集合,我们将其命名为 'negative_accounts'

client.publish_dataset(negative_accounts=df2)

从不同客户端加载已发布的数据集

现在,任何其他客户端都可以连接到调度器并检索这个已发布的数据集。

>>> from dask.distributed import Client
>>> client = Client('scheduler-address:8786')

>>> client.list_datasets()
['negative_accounts']

>>> df = client.get_dataset('negative_accounts')
>>> df.head()
      name  balance
0    Alice     -100
1      Bob     -200
2  Charlie     -300
3   Dennis     -400
4    Edith     -500

这使用户能够轻松共享结果。它还允许重要且常用的数据集在单个会话之外持久化。即使所有请求它们的客户端都已断开连接,已发布的数据集仍继续驻留在分布式内存中。

字典接口

或者,您可以使用客户端上的 .datasets 映射来发布、列出、获取和删除全局数据集。

>>> client.datasets['negative_accounts'] = df

>>> list(client.datasets)
['negative_accounts']
>>> df = client.datasets['negative_accounts']

此映射在连接到同一调度程序的所有客户端之间全局共享。

注释

发布的集合不会自动持久化。如果你发布了一个未持久化的集合,其他人仍然可以从调度器中获取该集合,但对该集合的操作将从头开始。这允许你发布不永久占用集群内存的数据视图,但如果你期望“发布”能自动使计算数据集快速可用,这可能会令人惊讶。

任何客户端都可以发布或取消发布数据集。

发布过多的大型数据集会迅速消耗集群的内存。

API

Client.publish_dataset(*args, **kwargs)

将命名数据集发布到调度器

Client.list_datasets(**kwargs)

列出调度器上可用的命名数据集

Client.get_dataset(name[, default])

如果存在,从调度器获取命名数据集。

Client.unpublish_dataset(name, **kwargs)

从调度器中移除命名数据集