【发布时间】:2019-07-02 02:03:00
【问题描述】:
我想将共享 DataFrame 的只读访问权限授予multiprocessing.Pool.map() 创建的多个工作进程。
我想避免复制和酸洗。
我知道 pyarrow 可以用于此。但是,我发现他们的文档非常繁琐。谁能提供一个例子来说明如何做到这一点?
【问题讨论】:
-
pyarrow 看起来并不能让您跨进程共享数据帧。它提供了一个类似于的接口,可以跨进程共享的数据帧。如果您想避免复制/酸洗,则需要使用
multiprocessing.sharedctypes,甚至还有一个创建共享结构数组以共享结构化数据的示例。 -
从我从这次谈话中了解到:youtu.be/Hqi_Bw_0y8Q,pyarrow 应该提供一个 pandas 集成,允许共享 DataFrame,而无需复制或序列化,不仅跨进程,甚至跨语言、框架和操作系统。
-
看来我们都至少部分正确。在您分享的视频的 21.20,Wes 谈到了在多个 python 进程之间共享数据的实际过程。似乎您需要设置一个 apache spark 实例来根据需要实际保存数据和数据中的 pyarrow 流(读取:序列化和复制)。这与 python 多处理共享对象非常相似,但序列化格式的开销要低得多,性能要高得多。
标签: python pandas python-multiprocessing pyarrow