Dask DataFrame

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

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

    API 是相同的。执行是相同的。

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

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

四个方块的列,集体标记为 Dask DataFrame,其中一个方块标记为 pandas DataFrame。

Dask DataFrame 协调许多沿索引排列的 pandas DataFrame/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 DataFrames

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

  1. 你的数据太大

  2. 你的计算太慢,其他技术也不起作用

如果你…,你可能应该只使用 pandas。

  1. 你的数据很小

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

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

示例

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

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

您也可以访问 http://www.aidoczh.com/dask-examples/ dataframe.html 获取更多示例集合。