hive中自定义函数(UDAF)实现多行字符串拼接为一行
2013-08-22 10:32
891 查看
函数如何使用:
hive> desc concat_test;
OK
a int
b string
hive> select * from concat_test;
OK
1 good
2 other
1 nice
1 hello
hive> select a,concat(b,',') from concat_test group by a;
OK
1 good,nice,hello
2 other
函数实现:
hive> desc concat_test;
OK
a int
b string
hive> select * from concat_test;
OK
1 good
2 other
1 nice
1 hello
hive> select a,concat(b,',') from concat_test group by a;
OK
1 good,nice,hello
2 other
函数实现:
import org.apache.hadoop.hive.ql.exec.UDAF; import org.apache.hadoop.hive.ql.exec.UDAFEvaluator; public class ConnectGroup 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); } } }
相关文章推荐
- [转]hive中自定义函数(UDAF)实现多行字符串拼接为一行
- hive中自定义函数(UDAF)实现多行字符串拼接为一行
- Hive中“一行变多行”、“多行合成一行”的实现实例
- **[Hive]用concat_w实现将多行记录合并成一行**
- SQL Server将一列的多行内容拼接成一行的实现方法
- SQL Server将一列的多行内容拼接成一行或一个字符串的问题
- hive concat_w实现将多行记录合并成一行
- [Hive]用concat_w实现将多行记录合并成一行
- SQL Server将一列的多行内容拼接成一行的实现方法
- SQL Server将一列的多行内容拼接成一行的实现方法
- 如何将Oracle中同一列的多行记录拼接成一个字符串 十一__262 | 浏览 8183 次 推荐于2016-01-25 17:34:18 最佳答案 需要用wm_concat函数来实现。
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询
- MySql多行数据合并成一行,将字段中的值拼接在一起
- 扩展js,实现c#中的string.format方便拼接字符串
- hive使用技巧(五)—— 一行转多行,多行转一行
- 如何用Python高效实现下面这样的字符串拼接操作?
- oracel 多行 字符串 合为一行
- sed实现多行匹配-从字符串a所在行匹配到字符串b所在行结束
- 关于数组中的值拼接成字符串中间用逗号隔开的实现
- ORACLE纯SQL实现多行合并一行【转】