Как выполнить set_index на большом фрейме данных dask и избежать смерти рабочих? - PullRequest
1 голос
/ 26 мая 2020
• 1000 1003 *

Сейчас у меня есть паркетные файлы, которые мне нужно проиндексировать по одному столбцу.

Код прост:

df = dd.read_parquet(input_path)
df = df.set_index(index_column)
df.to_parquet(output_path)

Я выполнил повторное разбиение входных файлов, чтобы разобраться 300 разделов по 1 ГБ (паркетная синхронизация, поэтому раздел ~ 70-80 МБ).

Я использую кластер Dask Kubernetes (рабочие: 2 ЦП, память: 16 или 32 ГБ), и я думал о такой операции будет работать даже с небольшим количеством рабочих (больше рабочих только для ускорения процесса).

Я вижу, что память стремится к верхнему пределу и рабочие погибают. Должен ли кластер иметь возможность загружать весь фрейм данных в память через рабочих?

Что делать, чтобы иметь возможность делать это даже с очень большими фреймами данных? Как отлаживать при необходимости? (локальное хранилище на одного работника, ...)

...