Dask Grouby Производительность для nunique слишком медленная.Как улучшить производительность? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть большие файлы размером более 5 ГБ.Я сохранил их в формате паркета.Когда я выполняю групповую операцию, как показано ниже, для небольшого набора записей из 600 тысяч записей, Dask занимает больше 6 минут, тогда как pandas занимал всего 0,4 секунды.Хотя я понимаю, что pandas работает быстрее, если набор данных помещается в память, но мой вопрос: если я передам весь файл паркета в Dask dataframe, улучшится ли производительность?

Также предложите мне, как улучшить приведенный ниже код, чтобы я мог работать за несколько секунд, а не за минуты.

Пример: использование Dask Dataframe

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))

Выводis:

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

Пример использования Pandas:

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:00:00.419033

1 Ответ

0 голосов
/ 21 сентября 2019

Я полагаю, что существует открытая проблема для приблизительного алгоритма группового алгоритма dask dataframe.Вы можете посмотреть на это, если вам это особенно интересно.Алгоритм, не связанный с групповыми данными, Dask dataframe работает немного быстрее.

...