Только для чтения набор данных Pandas в распределенном Dask - PullRequest
0 голосов
/ 25 апреля 2018

TL; DR
Я хочу разрешить работникам использовать разрозненный массив данных Pandas, но не позволять им изменять любые данные.Смотрите ниже пример кода.Это возможно?(или это чистый вопрос Панд?)

Полный вопрос
Я читаю Информационный блок Панд и рассылаю его работникам.Затем я использую это будущее, когда отправляю новые задачи и сохраняю его в переменной для легкого доступа.

Пример кода:

df = pq.read_table('/data/%s.parq' % dataset).to_pandas()
df = client.scatter(df, broadcast=True, direct=True)
v = Variable('dataset')
v.set(df)

Когда я отправляю работу, я использую:

def top_ten_x_based_on_y(dataset, column):
    return dataset.groupby(dataset['something'])[column].mean().sort_values(ascending=False)[0:10].to_dict()

a = client.submit(top_ten_x_based_on_y, df, 'a_column')

Теперь я хочу запустить 10-20 QPS для этого набора данных, который есть у всех рабочих в памяти (данные

Набор данных составляет примерно 2 ГБ.

Я понимаю, что это может быть проблематично, так как сам Pandas Dataframe не является неизменным (хотя может быть создан массив Numpy).

Другие идеи :

  1. Копировать набор данных для каждого запроса, но копирование 2 ГБ занимает время даже в ОЗУ (примерно 1,4 секунды)

  2. Разработать способ хеширования кадра данных (пробатично всамо по себе, даже если hash_pandas_object теперь существует), и проверьте до и после (или каждую минуту), соответствует ли датафрейм ожидаемому.Выполнение hash_pandas_object занимает примерно 5 секунд.

1 Ответ

0 голосов
/ 25 апреля 2018

К сожалению, в настоящее время Dask не предлагает никаких дополнительных функций поверх Python, чтобы избежать мутаций таким образом. Dask просто запускает функции Python, и эти функции Python могут делать все что угодно.

Ваши предложения по копированию или проверке перед выполнением операций кажутся мне разумными.

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

...