#python #dataframe #dask-dataframe
Вопрос:
Проблема: При попытке объединить два фрейма данных Dask в индексах я наблюдаю неожиданно низкую производительность. Я бы ожидал, что слияние будет «умно распараллелено», поскольку я объединяюсь по индексам. Каждый DF составляет всего ~150 тыс. строк х 2 столбца; однако слияние занимает более 2 минут, и я не вижу, чтобы происходило распараллеливание.
Спросите: Как повысить производительность?
Фрагмент кода:
import dask.dataframe as dd
import numpy as np
import pandas as pd
b_size = 10*1024*1024
filename = 'df1.csv'
multiple_fns = 'df2/*'
output_fn = 'output.csv'
df1 = dd.read_csv(filename, block_size=b_size, dtype={'var1': np.float64, 'var2': np.uint64})
df1 = df1.set_index('var1')
df2 = dd.read_csv(multiple_fns, block_size=b_size, dtype={'var1': np.float64, 'var3': np.uint64})
df2 = df2.set_index('var1')
df1 = df1.merge(right=df2, left_index=True, right_index=True)
df.to_csv(output_fn, single_file=True, header=True, index=False)
Скриншот панели мониторинга Dask:
Скриншот панели мониторинга
Комментарии:
1. Вы взглянули на панель управления dask, чтобы понять, что она делает?
2. Я этого не сделал — скорее новичок в Даске. Я полностью запускаю это на локальной машине (не используя распределенный Dask).
3. попробуйте
from dask.distributed import Client
client = Client(dashboard_address='127.0.0.1:41012', n_workers=10)
и выберите «клиент», затем вы можете перейти по этому адресу в своем браузере и просмотреть панель мониторинга. Не имеет значения, является ли это одной машиной или распределенной. Запустите это прежде всего. Перед этим перезапустите ядро.4. Опубликованный скриншот в оригинальном описании. join-indexed-getitem занимает львиную долю времени обработки.
5. @mcsoini — Теперь я вижу другое поведение, несмотря на то, что код не меняется. Моя локальная машина не использует дополнительные процессы, и я не могу загрузить панель мониторинга Dask. Я в растерянности.