Dask DataFrame

Dask DataFrame 通过并行化 pandas 来帮助您处理大型表格数据,既可以在笔记本电脑上进行超内存计算,也可以在计算机分布式集群上进行。

  • 就像 pandas:Dask DataFrames 是许多 pandas DataFrames 的集合。

    API 是相同的。执行方式也是相同的。

  • 大规模:可在笔记本电脑上处理 100 GiB,或在集群上处理 100 TiB 的数据。

  • 易于使用:纯 Python,易于设置和调试。

Column of four squares collectively labeled as a Dask DataFrame with a single constituent square labeled as a pandas DataFrame.

Dask DataFrames 协调了许多沿索引排列的 pandas DataFrames/Series。Dask DataFrame 按进行分区,通过索引值对行进行分组以提高效率。这些 pandas 对象可能存储在磁盘上或其他的机器上。

从 pandas 到 Dask

Dask DataFrame 复制了 pandas 的功能,因此对于大多数用户来说应该很熟悉。

Pandas 和 Dask 的 API 是相同的,因此从一个切换到另一个非常简单。

>>> import pandas as pd

>>> df = pd.read_parquet('s3://mybucket/myfile.parquet')
>>> df.head()
0  1  a
1  2  b
2  3  c
>>> import dask.dataframe as dd

>>> df = dd.read_parquet('s3://mybucket/myfile.*.parquet')
>>> df.head()
0  1  a
1  2  b
2  3  c

Dask 并行执行 pandas 操作。Dask 是惰性的;当您想要一个内存中的结果时,需要添加 .compute()

>>> import pandas as pd

>>> df = df[df.value >= 0]
>>> joined = df.merge(other, on="account")
>>> result = joined.groupby("account").value.mean()

>>> result
alice 123
bob   456
>>> import dask.dataframe as dd

>>> df = df[df.value >= 0]
>>> joined = df.merge(other, on="account")
>>> result = joined.groupby("account").value.mean()

>>> result.compute()
alice 123
bob   456

机器学习库通常有接受 Dask DataFrame 并并行运行的 Dask 子模块。

>>> import pandas as pd
>>> import xgboost
>>> from sklearn.cross_validation import train_test_split

>>> X_train, X_test, y_train, y_test = train_test_split(
...    X, y, test_size=0.2,
)
>>> dtrain = xgboost.DMatrix(X_train, label=y_train)

>>> xgboost.train(params, dtrain, 100)
<xgboost.Booster ...>
>>> import dask.dataframe as dd
>>> import xgboost.dask
>>> from dask_ml.model_selection import train_test_split

>>> X_train, X_test, y_train, y_test = train_test_split(
...    X, y, test_size=0.2,
)
>>> dtrain = xgboost.dask.DaskDMatrix(client, X, y)

>>> xgboost.dask.train(params, dtrain, 100)
<xgboost.Booster ...>

与所有 Dask 集合一样,您可以通过调用 .compute() 方法来触发计算,或使用 .persist() 方法将数据持久化到分布式内存中。

何时不使用 Dask DataFrame

Dask DataFrame 通常在以下情况使用…

  1. 您的数据太大

  2. 您的计算太慢,并且其他技术无效

如果出现以下情况,您应该只使用 pandas…

  1. 您的数据量小

  2. 您的计算速度快(亚秒级)

  3. 有更简单的方法来加速您的计算,例如避免使用 .apply 或 Python for 循环,而是使用内置的 pandas 方法。

示例

Dask DataFrame 广泛应用于各种场景中 — 任何需要处理大型表格数据集的地方。以下是一些大规模示例:

这些示例都在使用 Coiled 部署的 Dask 集群上处理超内存数据集,但管理和部署 Dask 有许多其他选项。有关部署选项的更多信息,请参阅我们的 部署 Dask 集群 文档。

您还可以访问 https://examples.dask.org.cn/dataframe.html 查看更多示例集合。