Python groupby镶木地板锉刀的最佳实践

Python groupby镶木地板锉刀的最佳实践,python,pyspark,parquet,dask,Python,Pyspark,Parquet,Dask,我们有15亿条记录分布在几个csv文件中。我们需要对多个列进行分组,以便生成一个计数聚合。 我们目前的策略是: 将它们加载到数据帧中(使用Dask或pyspark) 聚合列以生成2列作为key:value(我们不确定这是否值得) 将文件另存为Parquet 读取Parquet文件(Dask或pyspark)并在数据帧的索引上运行groupby 在拼花地板文件上高效分组的最佳实践是什么? 在索引上执行groupby而不是在一列(或一组列)上执行groupby有多大好处? 我们知道有一个分区可以提供

我们有15亿条记录分布在几个csv文件中。我们需要对多个列进行分组,以便生成一个
计数
聚合。
我们目前的策略是:

  • 将它们加载到数据帧中(使用
    Dask
    pyspark
  • 聚合列以生成2列作为key:value(我们不确定这是否值得)
  • 将文件另存为
    Parquet
  • 读取
    Parquet
    文件(
    Dask
    pyspark
    )并在数据帧的索引上运行groupby
  • 拼花地板
    文件上高效分组的最佳实践是什么?
    在索引上执行groupby而不是在一列(或一组列)上执行groupby有多大好处?

    我们知道有一个
    分区可以提供帮助,但在我们的例子中,我们需要对整个数据集进行分组,因此我们认为这与此无关

    如果您使用一个已知的聚合(如
    count
    mean
    )进行分组聚合,那么您的分区不会产生太大的影响。无论如何,这应该是相对较快的


    如果您使用一个非平凡的apply函数执行groupby应用(比如在每个组上运行sklearn模型),那么如果您存储数据以便分组列在拼花中排序,您将获得更快的体验

    编辑: 话虽如此,尽管groupby count并不特别鼓励智能分区,但换成拼花地板还是不错的。您会发现,您可以更快地阅读相关列


    作为一项快速免责声明,dask.dataframe目前不使用parquet中的计数统计信息来加速查询,除非在
    read\u parquet
    函数中进行过滤,并帮助识别已排序的列。

    是否有任何理由不直接按CSV生成的数据框分组?你想参加不同的团体活动吗?分组列的数据类型是什么?我们有15亿条记录(并且在不断增长)——因此,我们试图找到运行groupby的最有效方法。groupby列当前为
    文本
    。我们还想将另外两列保存到一个列表中(列内),我不确定我是否理解。由于我们正在执行
    count
    操作,因此不需要设置分区。但是,在执行groupby操作之前,是否仍有值可以读取\u csv
    ,然后写入
    parquet
    ?如果我们想保存键值(=计数)对以备将来更新,那么可能的/最佳键值存储格式是什么?