如何根据同一文件中的输入解析出现的事件

时间:2013-05-04 07:27:03

标签: hadoop hive

event1           foo_id1
event1           foo_id2
event1           foo_id4
event1           foo_id6
event1           foo_id7
event1           foo_id8
event1           foo_id8
event1           foo_id1
event1           foo_id4

event2           foo_id1
event2           foo_id2
event2           foo_id3
event2           foo_id4
event2           foo_id5
event2           foo_id6
event2           foo_id8
event2           foo_id9
event2           foo_id11

上述信息在某个存储桶(例如s3://hadoop.mycompany.com/bucket1/foo1.txt)下以S3中的文件形式提供。

所有活动都有foo_ids。对于“event2”中的所有活动,我想知道foo_idevent1个出现的次数。

e.g。在上述情况下,

foo_id1=2
foo_id2=1
foo_id3=0
foo_id4=2
foo_id5=0
foo_id6=1
foo_id8=2
foo_id9=0
foo_id11=0

如何编写hive脚本以返回预期格式的数据?

1 个答案:

答案 0 :(得分:1)

您可以使用以下配置单元脚本完成此操作:

  1. 首先,您需要使用此命令创建配置单元外部表

    创建EXTERNAL TABLE事件(事件STRING,foo STRING) 由'\ t'终止的行格式删除字段 LOCATION的s3n://hadoop.mycompany.com/bucket1/';

  2. 运行以下查询

    SELECT e2.foo,count(e1.foo) FROM事件e2 LEFT OUTER JOIN事件e1 ON e1.foo = e2.foo AND e1.event ='event1' WHERE e2.event ='event2' GROUP BY e2.foo;

  3. 你应该得到你需要的结果,如下所示:

    foo_id1  2
    foo_id11 0
    foo_id2  1
    foo_id3  0
    foo_id4  2
    foo_id5  0
    foo_id6  1
    foo_id8  2
    foo_id9  0
    

    希望这能解决你的问题。