Я хотел бы сопоставить функцию foo(x, my_object)
с СДР rdd
rdd2 = rdd.map(lambda x: foo(x, my_object))
, где foo
определяется как
def foo(x, some_object):
return [x, some_object.member_function(x)]
Другими словами, отображение применяет функцию-член переданного объекта. (В моем конкретном случае member_function()
- это, по сути, вызов функции Keras predict()
.)
Проблема в том, что я получаю ошибку PicklingError: Could not serialize object: TypeError: can't pickle _thread.lock objects
. Очевидно, у Spark есть проблема с обработкой определенных объектов.
Каков наилучший способ сделать это?
PS: я не намерен использовать RDD, на самом деле я бы предпочел работать с DataFrames.
РЕДАКТИРОВАТЬ : В отличие от примера , предложенного в качестве дубликата, эта проблема не характерна для глубокого обучения. Кроме того, я ищу минимальный рабочий пример, которого нет в предложенном дубликате (ссылки на AWS 'S3 и т. Д.). Наконец, нет объяснения, почему mapPartitions()
является решением. Мне просто нужен способ выполнить сопоставление и передать объект. Почему это не может работать? Предположительно, это как-то связано с механизмами сериализации Spark, но я хотел бы знать, какими могут быть (элегантные) обходные пути.