Что будет, если я использую метод класса в качестве udf в pyspark? - PullRequest
0 голосов
/ 08 октября 2018

Я понимаю, что происходит, если я определяю функцию Python и использую ее для пользовательской функции PySpark.

Однако мне не совсем ясно, что делает PySpark при вызове метода экземпляра объекта, такого как:

class Foo:
  _const = 1
  def f(x):
    return x +_const

foo_object = Foo()

f_udf = pyspark.functions.udf(foo_object.f)

Как функция передается исполнителям?Объект остается на менеджере или копируется исполнителям?

1 Ответ

0 голосов
/ 08 октября 2018

Вызов метода, подобный

foo_object.f(x)

, является просто синтаксическим сахаром для

Foo.f(foo_object, x)

, поэтому эффективная передача метода в udf на самом деле не отличается от передачи простой функции.

Spark будет:

  • Определить замыкание.
  • Определить аргументы.
  • Сериализованные объекты, вычисленные выше, а также сам вызываемый объект.
  • Распределите этот комплект среди рабочих.

Единственная возможная ошибка, с которой можно столкнуться и при передаче простой функции, заключается в том, что методы сериализации, используемые в PySpark, не могут сериализовать определения классов.,Это означает, что обязательные классы должны присутствовать на PYTHONPATH всех работников.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...