Pandas nunique的Dask Grouby性能太慢。如何提高性能?

Pandas nunique的Dask Grouby性能太慢。如何提高性能?,pandas,dask,Pandas,Dask,我有超过5GB的大文件。我已经把它们以拼花地板的形式储存起来了。当我对600k+记录的小样本集执行如下所示的groupby操作时,Dask需要6分钟以上的时间,而pandas只需要0.4秒。虽然我知道如果数据集适合内存,pandas会更快,但我的问题是,如果我将整个拼花地板文件传递给Dask dataframe,性能会提高吗 还建议我如何改进下面的代码,以便我可以在几秒钟内而不是几分钟内运行 示例:使用Dask数据帧 StartTime = datetime.datetime.now() df

我有超过5GB的大文件。我已经把它们以拼花地板的形式储存起来了。当我对600k+记录的小样本集执行如下所示的groupby操作时,Dask需要6分钟以上的时间,而pandas只需要0.4秒。虽然我知道如果数据集适合内存,pandas会更快,但我的问题是,如果我将整个拼花地板文件传递给Dask dataframe,性能会提高吗

还建议我如何改进下面的代码,以便我可以在几秒钟内而不是几分钟内运行

示例:使用Dask数据帧

StartTime = datetime.datetime.now()
df = dd.read_parquet('201908.parquet', columns=['A', 'B'], engine='pyarrow')
print (len(df))
df = df.set_index ('A')
rs = df.groupby('A').B.nunique().nlargest(10).compute(scheduler='processes')
print (rs)
EndTime = datetime.datetime.now()
print ("Total Time Taken for processing: " + str(EndTime - StartTime))
输出为:

606995
A
-3868378286825833950    7
 1230391617280615928    7
 381683316762598393     6
-5730635895723403090    5
 903278193888929465     5
 2861437302225712286    5
-9057855329515864244    4
-8963355998258854688    4
-7876321060385968364    4
-6825439721748529898    4
Name: B, dtype: int64
Total Time Taken for processing: 0:06:05.042146
606995
A
-3868378286825833950    7
 1230391617280615928    7
 381683316762598393     6
-5730635895723403090    5
 903278193888929465     5
 2861437302225712286    5
-9057855329515864244    4
-8963355998258854688    4
-7876321060385968364    4
-6825439721748529898    4
Name: B, dtype: int64
Total Time Taken for processing: 0:00:00.419033
使用熊猫的示例:

StartTime = datetime.datetime.now()
df = pd.read_parquet('201908.parquet', columns=['A', 'B'], engine='pyarrow')
print (len(df))
df = df.set_index ('A')
rs = df.groupby('A').B.nunique().nlargest(10)
print (rs)
EndTime = datetime.datetime.now()
print ("Total Time Taken for processing: " + str(EndTime - StartTime))
输出为:

606995
A
-3868378286825833950    7
 1230391617280615928    7
 381683316762598393     6
-5730635895723403090    5
 903278193888929465     5
 2861437302225712286    5
-9057855329515864244    4
-8963355998258854688    4
-7876321060385968364    4
-6825439721748529898    4
Name: B, dtype: int64
Total Time Taken for processing: 0:06:05.042146
606995
A
-3868378286825833950    7
 1230391617280615928    7
 381683316762598393     6
-5730635895723403090    5
 903278193888929465     5
 2861437302225712286    5
-9057855329515864244    4
-8963355998258854688    4
-7876321060385968364    4
-6825439721748529898    4
Name: B, dtype: int64
Total Time Taken for processing: 0:00:00.419033

我相信对于dask数据帧的近似groupby nunique算法存在一个公开问题。如果你特别感兴趣的话,你可以研究一下。Dask dataframe的非groupby nunique算法要快得多。

Hi,我主要对SeriesGroupby nunique感兴趣。我测试了非groupby的1.6亿条记录。它相当快。我很高兴。但这对我的用例没有用处。我需要独一无二的groupby。你知道这个问题什么时候能解决吗?只要有人着手解决。Dask是一个免费的开源项目。当人们努力工作时,进步就会发生。如果你想做某事,最好的办法可能是自己做。如果你有时间在这里贡献,我想其他人也会觉得这很有价值。当然,我会尽我所能贡献。请让我知道我该如何处理这个问题。嗨,Rocklin,我想知道是否有人处理过这个问题?或者nunique选项是否有其他解决方案?