gpt4 book ai didi

dask - 修改 dask 数据帧的安全且高效的方法

转载 作者:行者123 更新时间:2023-12-01 01:49:04 25 4
gpt4 key购买 nike

作为数据工作流的一部分,我需要修改 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) 也是如此,它不起作用。分区是否应该被深度复制然后就地修改?或者我应该总是从新的/映射的列数据和原始/未修改的系列/列中构建一个新的数据框?

最佳答案

您可以安全地修改 dask.dataframe

支持以下操作且安全

df['col'] = df['col'].map(func)

这会就地修改任务图,但不会就地修改数据(假设函数 func 创建了一个新系列)。

您不能安全地修改分区

你的第二个案例当你 map_partitions修改 pandas 数据框的函数是不安全的。 Dask 希望能够重用数据,必要时调用两次函数等。如果您有这样的函数,那么您应该首先在该函数中创建 Pandas 数据帧的副本。

关于dask - 修改 dask 数据帧的安全且高效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46052691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com