groupby для очень большого набора данных 10 ГБ с библиотеками python, pandas, vaex и dask

#python #pandas #dask #large-data #vaex

#python #pandas #dask #большие данные #vaex

Вопрос:

У меня более 10 ГБ данных о транзакциях, я использовал DASK для чтения данных, выбора интересующих меня столбцов, а также группирования по нужным столбцам. Все это было невероятно быстро, но вычисления работали плохо, и отладка была сложной.

Затем я решил открыть свои данные с помощью PANDAS chunksize, разделив мои данные на миллион. А затем использовал VAEX для объединения файлов в один большой файл HDF5. До сих пор все шло хорошо, но когда я пытаюсь сгруппировать свои столбцы и превысить 50 Тыс. Данных, мой код вылетает. Мне было интересно, как с этим справиться … должен ли я группировать каждый фрагмент pandas, прежде чем объединять их в vaex dataframe или можно преобразовать мой vaex dataframe в dask dataframe, groupby, а затем преобразовать сгруппированный по dataframe в vaex, который более удобен для меня, поскольку он похож на pandas.

 path=....
cols=['client_1_id','amount', 'client_2_id',  'transaction_direction'] 

chunksize = 10**6
df = pd.read_csv(path,
                 iterator=True,
                 sep='t',
                 usecols=cols,
                 chunksize=chunksize,
                error_bad_lines=False)


import vaex
# Step 1: export to hdf5 chunks
for i, chunk in enumerate(df):
    print(i)
    df_chunk = vaex.from_pandas(chunk, copy_index=False)
    df_chunk.export_hdf5(f'dfv_{i}.hdf5')
    
dfv = vaex.open('dfv_*.hdf5')

# Step 2: Combine back into one big hdf5 file
dfv.export_hdf5('dfv.hdf5')


dfv=vaex.open('dfv.hdf5')
  

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

Комментарии:

1. «вычисления работали плохо» — если вы спрашиваете о dask, вы должны сказать, что вы сделали и что пошло не так. Если нет, то удалите эту часть как неактуальную.

2. я не уточнял это, поскольку не понимал, почему это не работает. На самом деле каждый раз, когда я выполнял df.compute(), он выполнялся очень долго, прежде чем выдать мне «недопустимый аргумент», но я понятия не имею, что было не так. Я сохранил dask в названии, так как мне было интересно, следует ли мне все еще использовать его для создания groupby и можно ли перейти от фрейма данных dask к фрейму данных vaex.

3. Dask должен быть в состоянии делать то, что вы хотите, сам по себе, но мы не можем помочь без дополнительной конкретики. Действительно, в конечном итоге вы загружаете большой файл и … что потом? Зачем вам вообще нужен один большой файл?

4. моя цель — использовать данные транзакций для создания большого графика социальной сети, если у меня нет всех данных в одном файле, я могу пропустить некоторые связи между людьми. Я продолжал попытки с dask, и я знаю, что мне нужно быть более конкретным в отношении ошибки, чтобы получить помощь, но я не знаю, почему мое ядро умирает каждый раз, когда я пытаюсь вычислить свой фрейм данных dask. с VAEX все работает нормально, кроме groupby. итак, мой вопрос в том, как преобразовать groupby фрейма данных dask в файл HDF5, который можно открыть с помощью vaex?

5. Я все еще подозреваю, что вы задаете неправильный вопрос. «за исключением groupby» — самая большая часть использования памяти, что, вероятно, также является проблемой для dask.