如果我有一个依赖于某些全局或其他常量的函数,如下所示:
x = 123
def f(partition):
return partition + x # note that x is defined outside this function
df = df.map_partitions(f)
这有效吗?还是我需要以某种方式显式地包含外部变量x
?
答案 0 :(得分:0)
如果您在单台计算机上并且未使用dask.distributed,则无所谓。变量x
存在,不需要四处移动
如果我们必须在进程之间移动函数,则需要将该函数序列化为字节串。 Dask使用库cloudpickle来完成此操作。
cloudpickle库以捕获大多数设置中的外部变量的方式将Python函数f
转换为bytes
对象。因此,查看您的函数是否可以与Dask一起使用的一种方法是尝试对其进行序列化,然后在其他计算机上反序列化。
import cloudpickle
b = cloudpickle.dumps(f)
cloudpickle.loads(b) # you may want to try this on your other machine as well
如何实现这一目标可能非常复杂。您可能需要查看他们的文档。