Я совсем новичок в DASK, я пытаюсь настроить распределенный кластер в частном облаке. Сейчас у меня есть планировщик и один рабочий, работающие в одном контейнере Docker на одной машине. Они начинаются с dask-scheduler
и dask-worker tcp://localhost:8786
соответственно.
Я подключаюсь с моего локального компьютера к планировщику. Для простоты предположим, что я запускаю консоль I Python локально, в каталоге /home/my_user/local_directory
. Я бегу:
from dask.distributed import Client
client = Client('scheduler_host:scheduler_port')
Это отлично работает. Я могу выполнять некоторые операции, планировать работу, .compute()
на dataframes
также работает как положено.
У меня возникла проблема при сохранении результатов в файл. Следуя примеру из здесь и работающему:
import dask
import os
if not os.path.exists('data'):
os.mkdir('data')
df = dask.datasets.timeseries()
df.to_csv('data/*.csv')
Я ожидаю, что файлы csv (1..30.csv) будут созданы в локальной директории data
т.е. в /home/my_user/local_directory/data
на моей локальной машине. Вместо этого файлы сохраняются на планировщике / рабочем компьютере в каталоге /home/my_user/local_directory/data
. То же самое происходит при замене последней строки на df.to_csv('data/test.csv', single_file=True)
.
При замене этой строки на df.to_parquet('test.parquet')
происходит нечто более интересное. В случае parquet
на моем локальном компьютере создается пустой каталог test.parquet
, а результаты сохраняются в /home/my_user/local_directory/test.parquet
в планировщике / работнике. Это также вызовет ошибки, если каталог недоступен локально.
Согласно это , запуск to_parquet
должен сохранять файлы локально. Но согласно это файлы создаются локально на рабочей машине. Если второе верно, почему каталог паркет должен быть создан локально? Зачем работнику использовать мой локальный путь при хранении данных?
Это так и должно работать? Возможно, я что-то не так с установкой? Пожалуйста, порекомендуйте! Заранее спасибо!