发布数据集

发布数据集

一个 已发布数据集 (published dataset) 是指已发布到集群中的 Dask 集合或 future 列表的命名引用。它对任何客户端都可见,并能持续存在于单个会话范围之外。

发布数据集在以下情况下非常有用:

  • 你想与同事共享计算结果

  • 你想在不同的交互式会话之间将结果持久化到集群上

动机示例

在此示例中,我们从 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']

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

注意事项

已发布的集合不会自动持久化。如果您发布一个未持久化的集合,那么其他人仍然可以从调度器获取该集合,但对该集合的操作将从头开始。这允许您发布数据视图,这些视图不会永久占用集群内存,但如果您期望“发布”会自动使计算好的数据集快速可用,则可能会感到意外。

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

发布太多大型数据集会很快消耗集群的 RAM。

API

Client.publish_dataset(*args, **kwargs)

向调度器发布命名数据集

Client.list_datasets(**kwargs)

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

Client.get_dataset(name[, default])

从调度器获取指定的命名数据集(如果存在)。

Client.unpublish_dataset(name, **kwargs)

从调度器移除指定的命名数据集