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

时间:2015-03-19 11:10:42

标签: 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版本中执行此操作。

2 个答案:

答案 0 :(得分:1)

df.pop('val').to_numpy().tolist()

这是我们如何定义一个函数并注册以在任何 spark-sql 查询中使用

答案 1 :(得分:0)

鉴于Spark UDF的最新实现(2.3.1 documentation)不包含任何python UDF注册功能(仅限scala和Java),我建议使用leveraging Jython to call your Python functions

您将能够使用调用Jython的方法来定义Java类来运行python函数,然后将这些Java方法注册为SQL上下文中的UDF。尽管这比直接将python代码注册为UDF更为round回,但它的好处是符合当前模式并具有更可维护的上下文切换。