Dask.dataframe.слияние по индексам неожиданно медленное

#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. Я в растерянности.