Sparksql的UDF(自定义函数)---完成你实现不了sql语句(初篇一)

  • UDF

User Define Function, 用户自定义函数,简称UDF,存在与很多组件中

  • 现在由于项目的需要,开始引用Spark技术,其中的SparkSql组件是其核心组件之一,在Spark1.1版本的时候,Spark推出了Uer Define Function功能,用户可以在Spark SQL 里自定义实际需要的UDF来处理数据
  • 相信在使用Sparksql的人都遇到了Sparksql所支持的函数太少了的难处,除了最基本的函数,Sparksql所能支撑的函数很少,肯定不能满足正常的项目使用,UDF可以解决问题
  • 废话不多说,本篇讲解如何在java ide中最简单实现udf,更详细的说明等研究透了些再写写(基于Java的代码实现介绍)
  • SparkSql的应用分两步
  1. 注册

调用API的是SQLContext

JavaSparkContext jsc = new JavaSparkContext(sparkconf);
		SQLContext jscsql = new SQLContext(jsc);

 

jscsql 就可以直接调用API方法了
代码实例:
JavaSparkContext jsc = new JavaSparkContext(sparkconf);
		SQLContext jscsql = new SQLContext(jsc);
		jscsql.udf().register("concat_odso",new UDF2<String,String,String>(){
			public String call(String arg1, String arg2) {
	               return arg2 + arg1;
	           }},DataTypes.StringType);

  SQLContext.udf().register(string name,Function)的声明注册模式

Function可以使用UDF1到UDF22/21?,所表达的意思就是几个参数,2代指两个入参,10代指10个入参

return返回的即为UDF<>的最后一个参数,

DataTypes.StringType用于表名返回的格式
DataTypes.StringType/BooleanType/....等等格式
注意要引用的包

import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.api.java.UDFX;
  •  注册完成后,就会自定义一个函数,函数的名字即为你的
    register的第一个参数(string name)
  1. 使用

使用自定义的函数很简单,看成一个自带的函数即可,代码实例如下

DataFrame result01 = jscsql.sql("select concat_odso(t.mdn,t.mdn) from data_evdo t where t.bsid='374E00000BA1'");

  

concat_odso即为自定义的函数名字,该定义函数实现了查询结果字符串的拼接
posted @ 2015-08-25 00:02  zqk  阅读(9201)  评论(0编辑  收藏  举报