Parquet文件中groupby的最佳实践

时间:2017-07-09 18:45:45

标签: python pyspark parquet dask

我们在几个csv文件中分发了1.5BM的记录。我们需要在多个列上进行分组才能生成count聚合 我们目前的战略是:

  1. 将它们加载到数据框中(使用Daskpyspark
  2. 汇总列以生成2列作为键:值(我们不确定这是否值得)
  3. 将文件另存为Parquet
  4. 阅读Parquet文件(Daskpyspark)并对数据框的索引运行groupby。
  5. Parquet文件上有效群组的最佳做法是什么? 在索引上而不是在列(或一组列)上执行groupby是多么有用? 我们知道有一个partition可以提供帮助 - 但在我们的情况下,我们需要对整个数据集进行分组 - 因此我们认为它不相关。

1 个答案:

答案 0 :(得分:1)

如果您正在使用已知聚合(例如countmean进行groupby聚合,那么您的分区将不会产生太大的差异。无论如何,这应该相对较快。

如果你正在使用一个非平凡的应用函数进行groupby-apply(比如在每个组上运行sklearn模型),那么如果存储数据以便分组列按镶木地板分类,您将获得更快的体验

编辑:

话虽如此,尽管groupby-count并不特别鼓励智能分区,但转换到Parquet仍然很不错。您会发现可以更快地阅读相关列。

作为一个快速免责声明,dask.dataframe目前不使用镶木地板中的计数统计数据来加速查询,除非在read_parquet函数内进行过滤并帮助识别已排序的列。