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).
Другие идеи :
Копировать набор данных для каждого запроса, но копирование 2 ГБ занимает время даже в ОЗУ (примерно 1,4 секунды)
Разработать способ хеширования кадра данных (пробатично всамо по себе, даже если hash_pandas_object
теперь существует), и проверьте до и после (или каждую минуту), соответствует ли датафрейм ожидаемому.Выполнение hash_pandas_object занимает примерно 5 секунд.