DASK dataframe.to_csv хранит файлы на рабочем месте, а не локально - PullRequest
0 голосов
/ 27 марта 2020

Я совсем новичок в 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 должен сохранять файлы локально. Но согласно это файлы создаются локально на рабочей машине. Если второе верно, почему каталог паркет должен быть создан локально? Зачем работнику использовать мой локальный путь при хранении данных?

Это так и должно работать? Возможно, я что-то не так с установкой? Пожалуйста, порекомендуйте! Заранее спасибо!

1 Ответ

0 голосов
/ 28 марта 2020

Функции хранения данных Dask сохраняют результаты рабочих. Обычно люди используют Dask с глобальной файловой системой, такой как NFS, HDFS или хранилище облачных объектов.

Если вы хотите хранить вещи локально, вам следует либо использовать Dask на одном компьютере, либо, если ваши результаты невелики, вы можете позвонить .compute, чтобы вернуть результаты на локальный компьютер как pandas фрейм данных, а затем используйте функции хранения Pandas.

...