如何在Java/Scala中的SparkSQL中将Python函数注册为UDF?

kko*_*rad 8 apache-spark apache-spark-sql

我在Python中几乎没有非常非常简单的函数,我想在Spark SQL中用作UDF.从Python注册和使用它们似乎很容易.但是我想在使用JavaSQLContext或SQLContext时从Java/Scala中使用它们.我注意到在spark 1.2.1中有函数 registerPython但它既不清楚我是如何使用它,也不是我应该......

关于如何做到这一点的任何想法?我认为它在1.3.0中可能会变得更容易但我只限于1.2.1.

编辑:由于不再在这方面工作,我有兴趣知道如何在任何 Spark版本中执行此操作.

bsp*_*ion 0

鉴于 Spark UDF 的最新实现(2.3.1 文档)不包含任何 python UDF 注册功能(仅限 scala 和 Java),我建议利用 Jython 来调用您的 Python 函数

您将能够定义一个 Java 类,其中包含调用 Jython 的方法来运行 Python 函数,然后在 SQL 上下文中将这些 Java 方法注册为 UDF。虽然这比直接将 python 代码注册为 UDF 更为迂回,但它的优点是符合当前模式并具有更易于维护的上下文切换。