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

时间:2018-08-18 16:30:12

标签: scala apache-spark pyspark py4j mlflow

几个人(123)出于性能原因,已经讨论了在PySpark应用程序中使用Scala UDF。我对相反的东西很感兴趣-在Scala Spark项目中使用python UDF。

我特别想使用sklearn(和MLFlow)构建模型,然后将其有效地应用于Spark流作业中的记录。我知道我也可以在REST API和make calls to that API in the Spark streaming application中的mapPartitions之后托管python模型,但是为该任务管理并发性并为托管模型设置API并不是我很兴奋的事情

在没有像Py4J这样的自定义开发的情况下,是否有可能?这只是个坏主意吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

处查看文档

然后可以使用Python,Scala,Java,R或其他任何语言从sqlContext调用此函数,因为您是直接访问sqlContext(注册udf的地方) 。例如,您将调用

之类的名称
spark.sql("SELECT my_python_udf(...)").show()

PROS-您可以从Scala调用sklearn模型。

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

我希望这对至少将来的访客有所帮助。