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

标签 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次是很愚蠢的,我宁愿使用循环。显然,这些都是同一列族中的列限定符。

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

在Pig,Hive,Native Mapreduce或HBase Shell中是否有办法做到这一点?

最佳答案

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

关于loops - 使用循环在HBase中创建多个列限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309912/

相关文章:

java - 分析多个输入文件并只输出一个包含一个最终结果的文件

java - 将 Reducer 的输出添加到 Hadoop 中的列表

r - 环通环通数据帧 : How to improve performance on loop that calculates the result based on another loop through the dataset

android - 如何循环我的媒体播放器文件?

Hadoop:中间合并失败

java - 访问webhdfs时出现UnsupportedOperationException

hadoop - 如何限制 Pig 脚本启动的并发作业数量?

c++ - 我可以在 for 循环的 init-expression 中使用不同的类型吗?

java - 从 Java 中的 Hashmap 数据循环遍历数组

java - MapReduce 多个归约任务