【发布时间】:2019-01-25 09:28:24
【问题描述】:
很多人(1、2、3)讨论了在 PySpark 应用程序中使用 Scala UDF,通常是出于性能原因。我对相反的情况感兴趣 - 在 Scala Spark 项目中使用 python UDF。
我特别感兴趣的是使用 sklearn(和 MLFlow)构建模型,然后将其有效地应用于 Spark 流作业中的记录。我知道我还可以在 REST API 和 make calls to that API in the Spark streaming application 后面托管 Python 模型 mapPartitions,但是管理该任务的并发性并为托管模型设置 API 并不是我非常兴奋的事情。
如果没有像 Py4J 这样的太多自定义开发,这可能吗?这只是个坏主意吗?
谢谢!
【问题讨论】:
-
这是可能的,但绝对不支持也不简单。所以问题真的是你为什么要尝试。真的很难为这样的过程找到合理的理由。
-
@user6910411 感谢您的回复。我解释了问题中的用例 - 我想使用我使用 sklearn 训练的模型来评估结构化流应用程序中的各个行。
-
我想问题是——如果你已经想为跨语言通信付出代价,为什么不一直使用 PySpark?
-
在这种情况下,因为 1)python 操作将是一个更大的 Spark 作业的一小部分,我宁愿不为整个事情支付 PySpark 罚款,并且 2)我已经有一个成熟的 Scala 项目,只是想添加一点 python 而不需要重写。
-
不作为答案提交,但如果您使用 Databricks,您可以在同一个工作中使用 Scala 和 Python。您可以使用 sklearn 跳转到该 UDF 的 Pyspark,对记录进行评分,然后立即转换回下游的 Scala。公共层是 SparkSQL 中的 Spark 表。 Pyspark 可以读取和写入它们,以及 Scala 中的 Spark(显然)。不确定如何使用纯开源来做到这一点,或者 Zeppelin 之类的东西是否支持这一点。 (完全披露,我为 Databricks 工作)
标签: scala apache-spark pyspark py4j mlflow