UDF(User Defined Function):spark SQL中用户自定义函数,用法和spark SQL中的内置函数类似;是saprk SQL中内置函数无法满足要求,用户根据业务需求自定义的函数。
因为目前Spark SQL本身支持的函数有限,一些常用的函数都没有,比如len, concat…etc 但是使用UDF来自己实现根据业务需要的功能是非常方便的。Spark SQL UDF其实是一个Scala函数,被catalyst封装成一个Expression结点,最后通过eval方法计根据当前Row计算UDF的结果。 Spark SQL UDF使用起来非常方便,分2个步骤:
-
注册
当我们导入了SparkSession,即有注册UDF的功能。
//创建SparkSession val spark = SparkSession.builder().master("local").appName("Name").getOrCreate() //创建 用户自定义函数 val len = (s: String) => s.length //注册 spark.udf.register(udfName: String, func: FunctionN) //spark.udf.register("len", len)
由于scala语言的限制,这里UDF的参数仅支持22个。
-
使用
spark.sql("SELECT udfName(para1, para2...) FROM tableName")