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