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 DataFrames 并并行操作的 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 collections 一样,您可以通过调用 .compute() 方法触发计算,或使用 .persist() 方法将数据持久化到分布式内存中。

何时不使用 Dask DataFrames

Dask DataFrames 通常在以下情况下使用:

  1. 您的数据太大

  2. 您的计算太慢,并且其他技术不起作用

如果出现以下情况,您可能应该坚持只使用 pandas:

  1. 您的数据量很小

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

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

示例

Dask DataFrame 应用广泛——任何处理大型表格数据集的地方都可以使用。以下是一些大规模示例

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

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