Как использовать PySpark UDF в проекте Scala Spark?

Несколько человек ( 1, 2, 3) обсуждали использование UDF Scala в приложении PySpark, обычно из соображений производительности. Меня интересует обратное - использование Python UDF в проекте Scala Spark.

Я особенно заинтересован в создании модели с использованием sklearn (и MLFlow), а затем эффективно применяю ее к записям в потоковом задании Spark. Я знаю, что мог бы также разместить модель Python за REST API и делать вызовы этого API в потоковом приложении Spark в mapPartitions, но управление параллелизмом для этой задачи и настройка API для размещенной модели - это не то, что меня очень волнует.

Возможно ли это без слишком большого количества пользовательских разработок с чем-то вроде Py4J? Это просто плохая идея?

Спасибо!

0 ответов

Может, я опаздываю на вечеринку, но, по крайней мере, я могу помочь с этим для потомков. На самом деле это достижимо, создав свойpython udf и зарегистрировать его с spark.udf.register("my_python_udf", foo). Вы можете просмотреть документ здесь https://spark.apache.org/docs/latest/api/python/pyspark.sql.html

Затем эту функцию можно вызвать из sqlContext на Python, Scala, Java, R или на любом другом языке, потому что вы получаете доступ sqlContext напрямую (где udfзарегистрирован). Например, вы бы назвали что-то вроде

spark.sql("SELECT my_python_udf(...)").show()

ПЛЮСЫ - Вы можете позвонить своему sklearn модель из Scala.

МИНУСЫ - Вы должны использовать sqlContext и писать SQL запросы стиля.

Я надеюсь, что это поможет, по крайней мере, для будущих посетителей.

Другие вопросы по тегам