Есть ли польза от регистрации моего udf в pyspark? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть функция Python, такая как:

 def blank_as_null(x):
     return when(col(x) != "", col(x)).otherwise(None)

Я использую эту функцию без запуска udf(blank_as_null, StringType()), как предлагается в документации: http://spark.apache.org/docs/2.2.0/api/python/pyspark.sql.html или в этом видео: https://youtu.be/AsW0QzbYVow?t=42m33s (в 42:33 вы можете увидеть код, вызывающий функцию udf)

И тогда я сделаю что-то вроде:

myData.withColumn('myColumn', blank_as_null('myColumn'))

будет тамкакая польза от регистрации функции python в первую очередь?При каких условиях регистрация выгодна?Когда это не имеет значения?Или регистрация производится автоматически под капотом?

1 Ответ

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

Я думаю, что вы смешиваете два разных преобразования: API PySpark и UDF:

  • Преобразование API PySpark (из-за отсутствия лучшего имени) - это все, что использует уже существующую функциональность, предоставляемуюPySpark.Они сопоставляются с API Scala и запускаются непосредственно в JVM.Это то, что вы используете в своем примере кода (when, otherwise и т. П.).
  • Spark API не может охватывать каждое преобразование, поэтому Spark позволяет программистам определять свои собственные, и эточто такое пользовательская функция (UDF)Вам необходимо объявить и зарегистрировать их заранее, чтобы Spark знал, какие входные и выходные данные он ожидает.Преимущество этого механизма в том, что вы можете определить любое преобразование без ограничений Spark API.Однако они не будут иметь аналога JVM и, следовательно, будут выполняться на чистом Python, добавляя накладные расходы на связь между JVM и исполнителями Python.

Вы всегда должны стремиться к преобразованию первого типаиз-за соображений производительности, но если то, что вы пытаетесь достичь, невозможно с помощью Spark API, ваш единственный выбор - UDF.

...