天天看点

SQLContext自定义函数注册

本文简单介绍两种往SQLContext中注册自定义函数方法

背景:员工表emp,只有name和age两个字段。现在假设员工退休的法定年龄均为60岁,需要计算每个员工剩余工作年限。
           
val df = sc.parallelize(Seq(("张三", 25), ("李四", ),("赵六", ))).toDF("name", "age")
    df.registerTempTable("emp")
           
+----+---+
|name|age|
+----+---+
|  张三| 25|
|  李四| 30|
|  赵六| 27|
+----+---+
           

1.1 外部定义函数

定义函数

def remainWorkYears(age: Int) : Int = {
      - age
}
           

注册函数

sqlContext.udf.register("remainWorkYears", remainWorkYears _)
           

执行函数

sqlContext.sql("select e.*, remainWorkYears(e.age) as remainedWorkYear from emp e").show
+----+---+----------------+
|name|age|remainedWorkYear|
+----+---+----------------+
|  张三| 25|              35|
|  李四| 30|              30|
|  赵六| 27|              33|
+----+---+----------------+
           

1.2 匿名函数

注册匿名函数

sqlContext.udf.register("remainWorkYears_anoymous", (age: Int) => {
   - age
})
           

执行函数

sqlContext.sql("select e.*, remainWorkYears_anoymous(e.age) as remainedWorkYear from emp e").show
+----+---+----------------+
|name|age|remainedWorkYear|
+----+---+----------------+
|  张三| 25|              35|
|  李四| 30|              30|
|  赵六| 27|              33|
+----+---+----------------+
           

继续阅读