使用循环在HBase中创建多个列限定符

时间:2014-10-11 00:42:20

标签: loops hadoop mapreduce hive hbase

我想将行数据转换为列。

我的状态和访问数据如下:

State    Visit   Month
AZ       1023    06
NY       32234   06
OH       9821    06
NY       4564    07
KS       3232    06
MO       2322    06
AZ       222     07

我希望我的数据看起来像这样:

Month    AZ    KS    MO    NY     OH
06       1023  3232  2322  32234  9821
07       222               4564

我的数据存储在HBase

我看到它的方式,我可以按状态过滤数据,然后将新列附加到新表。 我可以用Pig中的少量列来做到这一点没有问题,但我认为这样做是愚蠢的50次,我宁愿使用循环。显然,这些都是同一列系列中的列限定符。

我知道猪没有循环。我一直试图在Hive中找到问题的解决方案,但到目前为止还没有运气。

有没有办法在Pig,Hive,Native Mapreduce或HBase Shell中执行此操作?

1 个答案:

答案 0 :(得分:0)

有一种方法可以在Hive中执行此操作。您可以收集访问次数和月份到地图,然后作为新列引用地图的键。您需要here

中的CollectUDAF

<强>查询:

ADD jar /path/to/jar/brickhouse.jar;
CREATE TEMPORARY FUNCTION collect AS 'brickhouse.udf.collect.CollectUDAF';

SELECT month
    ,state_map['AZ'] AS AZ
    ,state_map['NY'] AS NY
    ,state_map['OH'] AS OH
    ,state_map['KS'] AS KS
    ,state_map['MO'] AS MO
FROM (
    SELECT month
        ,collect(state, visit) AS state_map
    FROM database.table
    GROUP BY month
    ) x

<强>输出:

06    1023    32234    9821    3232    2322
07    222     4564     NULL    NULL    NULL