如何在Scala Spark项目中使用PySpark UDF?

tur*_*nvh 9 scala py4j apache-spark pyspark mlflow

几个人(1,2,3)已经在PySpark应用使用的Scala UDF,通常出于性能原因进行讨论.我对此感兴趣 - 在Scala Spark项目中使用python UDF.

我特别感兴趣的是使用sklearn(和MLFlow)构建模型,然后将其有效地应用于Spark流工作中的记录.我知道我也可以在REST API后面托管python模型并在Spark流应用程序调用该APImapPartitions,但管理该任务的并发性并为托管模型设置API并不是我非常兴奋的事情. .

如果没有像Py4J这样的定制定制开发,这可能吗?这只是一个坏主意吗?

谢谢!

Nap*_*rty 1

也许我参加聚会迟到了,但至少我可以为子孙后代提供帮助。这实际上可以通过创建您的python udf并将其注册到 来实现spark.udf.register("my_python_udf", foo)。您可以在此处查看文档https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.UDFRegistration.register

sqlContext然后可以从Python、Scala、Java、R 或任何语言中调用该函数,因为您是sqlContext直接访问(注册的地方udf)。例如,你会调用类似的东西

spark.sql("SELECT my_python_udf(...)").show()
Run Code Online (Sandbox Code Playgroud)

优点 - 您可以sklearn从 Scala 调用您的模型。

缺点 - 您必须使用sqlContext和编写SQL样式查询。

我希望这有帮助,至少对未来的访客有帮助。