SQLContext、HiveContext自定义函数注册

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

下边以sqlContext为例,在spark-shell下操作示例:

scala> sc
res5: org.apache.spark.SparkContext = org.apache.spark.SparkContext@35d4035f
scala> sqlContext
res7: org.apache.spark.sql.SQLContext = org.apache.spark.sql.hive.HiveContext@171b0d3
scala> val df = sc.parallelize(Seq(("张三", 25), ("李四", 30),("赵六", 27))).toDF("name", "age")
df: org.apache.spark.sql.DataFrame = [name: string, age: int]
scala> df.registerTempTable("emp")
1)外部定义函数:
scala> def remainWorkYears(age: Int) : Int = {
     |  60 - age
     | }
remainWorkYears: (age: Int)Int
scala> sqlContext.udf.register("remainWorkYears", remainWorkYears _)
res1: org.apache.spark.sql.UserDefinedFunction = UserDefinedFunction(<function1>,IntegerType,List())
scala> sqlContext.sql("select e.*, remainWorkYears(e.age) as remainedWorkYear from emp e").show
hiveContext.sql("select e.*, remainWorkYears(e.age) as remainedWorkYear from emp e").show
+----+---+----------------+
|name|age|remainedWorkYear|
+----+---+----------------+
|  张三| 25|              35|
|  李四| 30|              30|
|  赵六| 27|              33|
+----+---+----------------+
2)匿名函数:
scala> sqlContext.udf.register("remainWorkYears_anoymous", (age: Int) => {
     |   60 - age
     | })
res3: org.apache.spark.sql.UserDefinedFunction = UserDefinedFunction(<function1>,IntegerType,List())
scala> sqlContext.sql("select e.*, remainWorkYears_anoymous(e.age) as remainedWorkYear from emp e").show
+----+---+----------------+
|name|age|remainedWorkYear|
+----+---+----------------+
|  张三| 25|              35|
|  李四| 30|              30|
|  赵六| 27|              33|
+----+---+----------------+

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值