首页 > 解决方案 > 使用对象的成员函数映射 RDD

问题描述

我想将一个函数映射foo(x, my_object)到一个 RDDrdd

rdd2 = rdd.map(lambda x: foo(x, my_object))

其中foo定义为

def foo(x, some_object):

    return [x, some_object.member_function(x)]

换句话说,映射应用了传递对象的成员函数。(在我的特定情况下,member_function()本质上是对 Keraspredict()函数的调用。)

问题是我得到了错误PicklingError: Could not serialize object: TypeError: can't pickle _thread.lock objects。显然,Spark 在处理某些对象时存在问题。

做这个的最好方式是什么?

PS:我并不执着于使用 RDD,实际上我更喜欢使用 DataFrames。

编辑:与作为副本提出的示例不同,此问题并非特定于深度学习。此外,我正在寻找一个最小的工作示例,建议的副本不是(参考 AWS 的 S3 等)。最后,没有解释为什么mapPartitions()是解决方案。我只想要一种执行映射并传递对象的方法。为什么这行不通?据说这与 Spark 的序列化机制有关,但我想知道(优雅的)解决方法可能是什么。

标签: pythonapache-sparkkeraspyspark

解决方案


推荐阅读