我们在几个csv文件中分发了1.5BM的记录。我们需要在多个列上进行分组才能生成count
聚合
我们目前的战略是:
Dask
或pyspark
)Parquet
Parquet
文件(Dask
或pyspark
)并对数据框的索引运行groupby。 Parquet
文件上有效群组的最佳做法是什么?
在索引上而不是在列(或一组列)上执行groupby是多么有用?
我们知道有一个partition
可以提供帮助 - 但在我们的情况下,我们需要对整个数据集进行分组 - 因此我们认为它不相关。
答案 0 :(得分:1)
如果您正在使用已知聚合(例如count
或mean
进行groupby聚合,那么您的分区将不会产生太大的差异。无论如何,这应该相对较快。
如果你正在使用一个非平凡的应用函数进行groupby-apply(比如在每个组上运行sklearn模型),那么如果存储数据以便分组列按镶木地板分类,您将获得更快的体验
话虽如此,尽管groupby-count并不特别鼓励智能分区,但转换到Parquet仍然很不错。您会发现可以更快地阅读相关列。
作为一个快速免责声明,dask.dataframe目前不使用镶木地板中的计数统计数据来加速查询,除非在read_parquet
函数内进行过滤并帮助识别已排序的列。