分享

hive如何将多行数据聚集到一行中?

gwgyk 发表于 2015-12-10 16:36:27 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 13978
原始数据格式如下:id    col1    col2
1     a1       t1
1     b1       c1
2     a2       d2
2     l2        g2
2     t2        u2
3     b3       a3
3     z3       p3


想将相同 id 的行聚集起来,最后的效果如下:
id    new_col
1    [a1:t1,  b1:c1]
2    [a2:d2,  l2:g2,  t2:u2]
3    [b3:a3,  z3:p3]


不用在意a1,b2之类的字符,它只代表某个字段值。


我该使用哪种方式来得到上面的结果呢?


我试过的方法有:
1、UDF,但是UDF只能处理单行数据,没法聚集多行数据;
2、UDAF,但UDAF只能用Java写,无法支持Python,我们要求使用Python来写
3、想通过类似于reduce端join的方式来完成,只不过在reduce端将最后的join操作改为:根据相同的id进行拼接,但是hive无法支持这种方式。因为想直接写mapreduce来读取hive上的文件(数据表在hdfs上),但是文件格式并不是text,所以无法直接用mapreduce来完成。


请大家指教下,这个问题该怎么破,非常感谢。。。。


已有(3)人评论

跳转到指定楼层
langke93 发表于 2015-12-10 17:04:02
mapreduce不能直接读取文件的,编程有自己的规则,通过jdbc连接,然后在操作

参考:
通过JDBC驱动连接Hive操作实例
http://www.aboutyun.com/thread-7083-1-1.html


回复

使用道具 举报

langke93 发表于 2015-12-10 17:08:25


同时推荐一本书,相信会有帮助
Hive编程指南【完整版】书籍分享
http://www.aboutyun.com/thread-9428-1-1.html



回复

使用道具 举报

Joker 发表于 2015-12-11 17:21:16
[mw_shl_code=sql,true]select concat_ws(':',collect_set(xxx),'11',',') from you_table
group by xxx;
[/mw_shl_code]

hive还有其他这类的UDF,但是好像是CDH的,我就测试不到了,你可以耍一下这个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条