我在Python中有几个非常非常简单的函数,我想用作Spark SQL中的UDF。从Python中注册和使用它们似乎很容易。但当使用JavaSQLContext或SQLContext时,我想从Java/Scala中使用它们。我注意到在spark 1.2.1中有函数registerPython,但我既不清楚如何使用它,也不清楚我是否应该。。。
关于如何做到这一点有什么想法吗?我认为在1.3.0中可能会变得更容易,但我仅限于1.2.1。
编辑:由于不再从事这方面的工作,我很想知道如何在任何Spark版本中做到这一点。
from pyspark.sql import *
from pyspark.sql.types import *
from pyspark.sql import SQLContext
def dummy_function(parameter_key):
return "abc"
sqlContext.udf.register("dummy_function", dummy_function)
这就是我们如何定义一个函数和寄存器,以便在任何spark-sql查询
中使用鉴于Spark UDF的最新实现(2.3.1文档)不包括任何python UDF注册功能(仅限scala和Java),我建议利用Jython来调用您的python函数。
您将能够用调用Jython的方法定义一个Java类来运行python函数,然后在SQL上下文中将这些Java方法注册为UDF。虽然这比直接将python代码注册为UDF更为迂回,但它的好处是符合当前模式并具有更可维护的上下文切换。