如何使用hql通过将同一个键的记录保存到同一个Map器中来读取配置单元排序表

wfsdck30  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(198)

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

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

当向配置单元表插入数据时,配置单元sql使用了“按用户id分发按用户id排序,时间”。
现在我想从这个表中读取数据,我想它可以重复使用排序。但是有一个块问题,我需要在同一个Map器中使用相同的用户id记录,我将编写一个转换来处理相同用户的操作列表。但是当从表中读取时,我不能在一个Map器中保留相同用户id的操作。我试过一些方法,比如:
1) 仅“set hive.input.format=org.apache.hadoop.hive.ql.io.hiveinputformat;”但似乎不起作用,用户id仍然被划分为两个Map器(但我不知道为什么,我认为只设置hiveinputformat不会进行任何拆分)
2) 设置mapred.min.split.size=2048000000;将最小分割大小设置为更大,并希望相同的部分将被Map到一个Map器中。但是Map器的数目似乎有些奇怪(当将数据插入到配置单元表中时,有2000个缩减器,但是当我使用2g作为最小拆分大小时,Map器的数目是1478)。所以我认为同样的用户id也会被分割成不同的Map器。
3) 似乎可以重写输入格式,但我仍然不知道如何从我发现的例子写它。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题