我们已充分调整 Dask DataFrame 和 cuDF,以便像下面这样的 groupby 聚合能很好地工作。
df.groupby('x').y.mean()
本文介绍了我们必须完成的工作类型,作为未来开发的模型。
正如之前的一篇文章 Dask、Pandas 和 GPUs:第一步 所概述的,我们生产分布式 GPU dataframe 的计划是将 DaskDataFrame 与 cudf 结合起来。特别是,我们必须
在 Dask 方面,这主要意味着替换
在 cuDF 方面,这意味着进行数十处细微更改,以使 cuDF API 与 Pandas API 对齐,并添加缺失的功能。
我并不真的期望有人会浏览所有这些问题,但我希望通过快速浏览这些问题标题,人们能够了解我们正在进行的各种更改。这是大量小事情的集合。
此外,赞扬 Thomson Comer 解决了上述大部分 cuDF 问题。
但总的来说,目前各项功能运行良好
In [1]: import dask_cudf
In [2]: df = dask_cudf.read_csv('yellow_tripdata_2016-*.csv')
In [3]: df.groupby('passenger_count').trip_distance.mean().compute()
Out[3]: <cudf.Series nrows=10 >
In [4]: _.to_pandas()
Out[4]
0 0.625424
1 4.976895
2 4.470014
3 5.955262
4 4.328076
5 3.079661
6 2.998077
7 3.147452
8 5.165570
9 5.916169
dtype: float64
首先,大部分工作由 cuDF 开发者处理(从上面问题列表的相对长度可能可以看出来)。当我们开始这个过程时,感觉就像一个永无止境的细小问题流。直到完成当前的问题集,我们才能看到下一组问题。幸运的是,大多数问题都很容易修复。此外,随着我们继续前进,随着时间的推移,似乎变得更容易了一些。
此外,由于上述变更,除了 groupby 聚合之外的许多功能也能工作。从习惯使用 Pandas 的人的角度来看,cuDF 库开始感觉更可靠了。在对其他操作使用 cuDF 时,我们遇到缺失功能的频率降低了。
最近,我们一直在研究 Dask DataFrame 中的各种 join/merge 操作,例如在排序列上的索引 join,大型和小型 dataframe 之间的 join(一个常见的特殊情况)等等。让主线 Dask DataFrame 代码库中的这些算法与 cuDF 协同工作,产生的问题集与我们在上面看到的 groupby 聚合类似,但到目前为止,列表要小得多。我们希望随着未来继续研究其他功能集,例如 I/O、时间序列操作、滚动窗口等等,这是一个趋势。