Dask объединяет два больших фрейма данных, которые не помещаются в памятьPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Dask объединяет два больших фрейма данных, которые не помещаются в память

Сообщение Anonymous »

Мне нужно объединить большие фреймы данных в dask, но ядро ​​моего ноутбука Jupyter выходит из строя из-за нехватки памяти. У меня 64 ГБ ОЗУ, но исходные наборы данных настолько скудны (данные о медицинских требованиях), и это объединение приводит к более чем 100 миллионам строк. Я читал, что Dask будет хорошим инструментом для обработки данных, которые не помещаются в память, но не уверен, правильно ли я его использую. Я читаю все свои файлы CSV, а также использовал размер блоков, чтобы перераспределить их для Dask. Я также включил функцию сохранения промежуточных ступеней как паркета. Есть ли способ, например, сохранить промежуточные результаты во время последнего слияния на диск, чтобы освободить немного памяти во время этой процедуры. Или есть другие инструменты, которые лучше подойдут для решения этой проблемы?
import dask.dataframe as dd

def save_and_reload(df, file_name):
"""
Saves the Dask DataFrame to a Parquet file and reloads it.
"""
df = df.repartition(npartitions=10) # Adjust partitions for better performance
df.to_parquet(file_name, write_index=False)
return dd.read_parquet(file_name)

def main():
# Read 11 CSV with smaller partitions
df = dd.read_csv(
file_path,
sep='\t',
dtype=dtypes.get(table_name, None),
parse_dates=parse_dates.get(table_name, None),
assume_missing=True,
blocksize="16MB"
)

# Merge step-by-step with intermediate saving for 11 .csvs
df_merged = dd.merge(dataframes['insurance_information'], dataframes['insurants'], on='pid', how='left')
df_merged = save_and_reload(df_merged, 'intermediate_1.parquet')

# This goes on for 10 more .csvs

df_merged = dd.merge(df_merged, dataframes['outpatient_fees'], on='pid', how='left')
df_merged = save_and_reload(df_merged, 'intermediate_10.parquet')

# After this merge the kernel crashes
df_merged = dd.merge(df_merged, dataframes['inpatient_fees'], on='pid', how='left')
df_merged = save_and_reload(df_merged, 'final_result.parquet')

if __name__ == "__main__":
main()


Подробнее здесь: https://stackoverflow.com/questions/793 ... nto-memory
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»