Dask DataFrame
内容
Dask DataFrame¶
Dask DataFrame 通过并行化 pandas 来帮助你处理大型表格数据,既可以在你的笔记本电脑上进行大于内存的计算,也可以在分布式计算机集群上进行。
仅 pandas: Dask DataFrames 是许多 pandas DataFrames 的集合。
API 是相同的。执行是相同的。
大规模: 在笔记本电脑上处理100 GiB,或在集群上处理100 TiB。
易于使用: 纯Python,易于设置和调试。
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 通常在以下情况下使用…
你的数据太大
你的计算太慢,其他技术也不起作用
如果你…,你可能应该只使用 pandas。
你的数据很小
你的计算速度很快(亚秒级)
有更简单的方法来加速你的计算,比如避免使用
.apply
或 Python 的 for 循环,而是使用内置的 pandas 方法。
示例¶
Dask DataFrame 被广泛应用于各种场景——任何处理大型表格数据集的地方。以下是一些大规模应用的例子:
这些示例都在使用 Coiled 部署的 Dask 集群上处理大于内存的数据集,但管理和部署 Dask 有许多选项。有关部署选项的更多信息,请参阅我们的 部署 文档。
您也可以访问 http://www.aidoczh.com/dask-examples/ dataframe.html 获取更多示例集合。