如何使用hql从hive排序表中读取,将同一个键的记录保存到同一个映射器中

时间:2015-07-29 03:47:24

标签: hadoop hive hql transform

我正在尝试从已排序的配置单元表中读取数据。该表记录了用户操作的列表,用户将有可能的操作。例如:

column: user_id  time               action
value:  u1      20150607/12:20:25  click_url1
value:  u1      20150607/12:21:25  search "stackoverflow" 
value:  u2      20150607/11:19:00  read news

当将数据插入到hive表时,hive sql使用"按user_id分配按user_id排序,时间"。

现在我想要从这个表中读取数据,我认为它可以重用这种类型。但是有一个块问题我需要在同一个映射器中使用相同的user_id记录,并且我将编写一个转换来处理同一用户的操作列表。但似乎从表中读取时,我无法在一个映射器中保留相同用户ID的操作。我尝试了一些方法:

1)只有"设置hive.input.format = org.apache.hadoop.hive.ql.io.HiveInputFormat;"但似乎不行,user_id仍然被分成两个映射器。(但我不知道为什么,我认为只设置HiveInputFormat不会做任何拆分)

2)SET mapred.min.split.size = 2048000000;将min分割大小设置为更大,并希望相同的部分将成为一个映射器。但似乎映射器数字有些奇怪(当将数据插入蜂巢表时,有2000个减速器,但当我使用2G作为最小分割大小时,映射器编号为1478)。所以我认为还会将相同的用户ID分成不同的映射器。

3)似乎可以重写InputFormat,但我仍然不知道如何从我发现的例子中写出它。

0 个答案:

没有答案