大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
2016-12-07 20:59
651 查看
大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
select sum_all(age) from ...
hive> use default;
show tables;
select * from employeeforhaving;
一:udf 编码
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class LowerCase extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
二:导出jar包 hadoopapps.jar
三,加载jar包
hive> add jar /root/..../hadoopapps.jar
四,hive> CREATE TEMPORARY FUNCTION tolower AS com.dt.spark.hive.HIVEUDF
五,使用
hive> SELECT tolower(name) from employeeforhaving;
一:UDAF 聚合 编码
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
public class concat extends UDAF {
public static class ConcatUDAFEvaluator implements UDAFEvaluator{
public static class PartialResult{
String result;
String delimiter;
}
private PartialResult partial;
public void init() {
partial = null;
}
public boolean iterate(String value,String deli){
if (value == null){
return true;
}
if (partial == null){
partial = new PartialResult();
partial.result = new String("");
if( deli == null || deli.equals("") )
{
partial.delimiter = new String(",");
}
else
{
partial.delimiter = new String(deli);
}
}
if ( partial.result.length() > 0 )
{
partial.result = partial.result.concat(partial.delimiter);
}
partial.result = partial.result.concat(value);
return true;
}
public PartialResult terminatePartial(){
return partial;
}
public boolean merge(PartialResult other){
if (other == null){
return true;
}
if (partial == null){
partial = new PartialResult();
partial.result = new String(other.result);
partial.delimiter = new String(other.delimiter);
}
else
{
if ( partial.result.length() > 0 )
{
partial.result = partial.result.concat(partial.delimiter);
}
partial.result = partial.result.concat(other.result);
}
return true;
}
public String terminate(){
return new String(partial.result);
}
}
}
二:
UDAF 聚合
select sum_all(age) from ...
hive> use default;
show tables;
select * from employeeforhaving;
一:udf 编码
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class LowerCase extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
二:导出jar包 hadoopapps.jar
三,加载jar包
hive> add jar /root/..../hadoopapps.jar
四,hive> CREATE TEMPORARY FUNCTION tolower AS com.dt.spark.hive.HIVEUDF
五,使用
hive> SELECT tolower(name) from employeeforhaving;
一:UDAF 聚合 编码
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
public class concat extends UDAF {
public static class ConcatUDAFEvaluator implements UDAFEvaluator{
public static class PartialResult{
String result;
String delimiter;
}
private PartialResult partial;
public void init() {
partial = null;
}
public boolean iterate(String value,String deli){
if (value == null){
return true;
}
if (partial == null){
partial = new PartialResult();
partial.result = new String("");
if( deli == null || deli.equals("") )
{
partial.delimiter = new String(",");
}
else
{
partial.delimiter = new String(deli);
}
}
if ( partial.result.length() > 0 )
{
partial.result = partial.result.concat(partial.delimiter);
}
partial.result = partial.result.concat(value);
return true;
}
public PartialResult terminatePartial(){
return partial;
}
public boolean merge(PartialResult other){
if (other == null){
return true;
}
if (partial == null){
partial = new PartialResult();
partial.result = new String(other.result);
partial.delimiter = new String(other.delimiter);
}
else
{
if ( partial.result.length() > 0 )
{
partial.result = partial.result.concat(partial.delimiter);
}
partial.result = partial.result.concat(other.result);
}
return true;
}
public String terminate(){
return new String(partial.result);
}
}
}
二:
UDAF 聚合
相关文章推荐
- 大数据Spark “蘑菇云”行动第91课:Hive中Index和Bucket案例实战及存储类型rcfile实战详解
- 大数据Spark “蘑菇云”行动第98课:Hive性能调优压缩和分布式缓存
- 大数据Spark “蘑菇云”行动第103课:Hive源码大师之路第一步:Hive源码思考和解析初体验
- 大数据Spark “蘑菇云”行动第102课:Hive性能调优之底层Hadoop引擎调优剖析和最佳实践
- 大数据Spark “蘑菇云”行动第92课:HIVE中的array、map、struct及自定义数据类型案例实战
- 大数据Spark “蘑菇云”行动第106课:Hive源码大师之路第四步:Hive中GroupBy和各种类型Join源码剖析
- 大数据Spark “蘑菇云”行动第86课:Hive分区表剖析与代码实战
- 大数据Spark “蘑菇云”行动第84课:Hive配置和实战第一课
- 大数据Spark “蘑菇云”行动第100课:Hive性能调优之企业级Join、MapJoin、GroupBy、Count、数据倾斜彻底解密和最佳实践
- 大数据Spark “蘑菇云”行动第89课:Hive中GroupBy优化、Join的多种类型实战及性能优化、OrderBy和SortBy、UnionAll等实战和优化
- 大数据Spark “蘑菇云”行动第97课:Hive性能调优的本质和源泉彻底解密
- 大数据Spark “蘑菇云”行动第99课:Hive性能调优之企业级Mapper和Reducer调优深度细节解密 参数配置
- 大数据Spark “蘑菇云”行动第95课:Hive安全解析和实战等
- 大数据Spark “蘑菇云”行动第107课:Hive源码大师之路第五步:Hive中一切Operator皆是函数的内幕及Hive中Optimizer优化
- 大数据Spark “蘑菇云”行动第104课:Hive源码大师之路第二步:Hive真正的入口、词法分析和语法分析
- 大数据Spark “蘑菇云”行动第101课:Hive性能调优之企业级数据倾斜解决方案及对Job数目的优化
- 大数据Spark “蘑菇云”行动第96课:基于Hive对电商数据案例分析
- 大数据Spark “蘑菇云”行动第90课:Hive中Join电影店铺系统案例和性能优化、Index和Bucket案例实战
- 大数据Spark “蘑菇云”行动第87课:Hive嵌套查询与Case、When、Then案例实战
- 大数据Spark “蘑菇云”行动第105课:Hive源码大师之路第三步:Hive序列化与反序列原理内幕和源码解析