我正在尝试从已排序的配置单元表中读取数据。该表记录了用户操作的列表,用户将有可能的操作。例如:
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,但我仍然不知道如何从我发现的例子中写出它。