Как использовать 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
запросы стиля.
Я надеюсь, что это поможет, по крайней мере, для будущих посетителей.