В рамках рабочего процесса с данными мне нужно изменить значения в подмножестве столбцов фрейма данных dask и передать результаты для дальнейших вычислений. В частности, меня интересуют два случая: сопоставление столбцов и сопоставление разделов. Каков рекомендуемый безопасный и эффективный способ работы с данными? Я использую распределенную установку в кластере с несколькими рабочими процессами на каждом хосте.
Case1.
Я хочу бежать:
res = dataframe.column.map(func, ...)
это возвращает серию данных, поэтому я предполагаю, что исходный фрейм данных не изменен. Безопасно ли назначать столбец обратно в фрейм данных, например. dataframe['column']=res
? Возможно нет. Следует ли мне сделать копию с помощью .copy (), а затем присвоить ей результат, например:
dataframe2 = dataframe.copy()
dataframe2['column'] = dataframe.column.map(func, ...)
Любой другой рекомендуемый способ сделать это?
Case2
Мне нужно сопоставить разделы фрейма данных:
df.map_partitions(mapping_func, meta=df)
Внутри mapping_func () я хочу изменить значения в выбранных столбцах, используя partition[column].map
или просто создав понимание списка. Опять же, как безопасно изменить раздел и вернуть его из функции сопоставления?
Раздел, полученный функцией сопоставления, представляет собой фрейм данных Pandas (копия исходных данных?), Но при изменении данных на месте я вижу некоторые сбои (хотя сообщений об исключениях / ошибках нет). То же самое и с вызовом partition.copy(deep=False)
, он не работает. Следует ли глубоко скопировать раздел, а затем изменить его на месте? Или мне всегда следует создавать новый фрейм данных из новых / сопоставленных данных столбца и исходных / немодифицированных серий / столбцов?