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

hlswsv35  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(625)

我想把我的行数据转换成列。
我有州和访问数据:

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次是愚蠢的,我宁愿使用循环。显然,这些都是同一列族中的列限定符。
我知道Pig没有环。我一直在想办法解决Hive里的问题,但到目前为止运气不好。
在pig、hive、原生mapreduce或hbase shell中有没有实现这一点的方法?

u7up0aaq

u7up0aaq1#

有一种方法可以在Hive里做到这一点。您可以收集对Map的访问量和月份,然后在创建新列时引用Map的键。你需要 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

相关问题