作为数据工作流的一部分,我需要修改 dask 数据框列子集中的值,并将结果传递给进一步计算。特别是,我对 2 种情况感兴趣:映射列和映射分区。推荐的安全和高效的数据处理方式是什么?我在每个主机上有多个工作进程的集群上运行它的分布式设置。
情况1。
我想跑:
res = dataframe.column.map(func, ...)
这会返回一个数据系列,所以我假设原始数据框没有被修改。将列分配回数据框是否安全,例如dataframe['column']=res
?可能不是。我是否应该使用.copy()进行复制,然后将结果分配给它,例如:
dataframe2 = dataframe.copy()
dataframe2['column'] = dataframe.column.map(func, ...)
还有其他推荐的方法吗?
案例2
我需要映射数据框的分区:
df.map_partitions(mapping_func, meta=df)
在mapping_func()内部,我想修改所选列中的值,方法是使用partition[column].map
或简单地创建一个列表理解。同样,如何安全地修改分区并从映射函数中返回它?
映射函数接收的分区是 Pandas 数据帧(原始数据的副本?),但是在就地修改数据时,我看到了一些崩溃(虽然没有异常/错误消息)。打电话也是一样partition.copy(deep=False)
,没用。分区是否应该被深度复制然后就地修改?或者我应该总是从新的/映射的列数据和原始/未修改的系列/列中构建一个新的数据框?