使用pig

时间:2016-12-09 07:53:14

标签: java hbase apache-pig

我正在运行一个猪脚本来存储数据。我有这样的代码:

TOP = foreach GROUPED_DATA {
    SORTED = order WEIGHTED_DATA BY review_weight DESC;
    best_review = limit SORTED 1;
    generate group as businessid, flatten (best_review); 
    } 

此代码为我提供了每个商家评分最高的评论,我得到了这样的元组:

ID,      weight,  ID,   user_id, count
(zzxb0Y , 34.2, zzxb0Y, dVK7EAJd, 5 )

我正在尝试使用代码将其存储在hbase中:

STORE TOP INTO 'hbase://sample_data' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage(sample_col:weight, sample_col:user_id, sample_col:count);

我得到索引超出范围错误:

java.lang.Exception: java.io.IOException: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:529)
`Caused by: java.io.IOException: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3

我想将数据存储在Hbase中,其中ID是密钥,对于每个ID,在column_family中我存储了三个值。请告诉我该怎么做

1 个答案:

答案 0 :(得分:1)

"顶"关系有5列 但你的hbase表有3列,因为第一列是行键,所以" Top"中只有4列。 .regenerate顶级关系和输出应该是 ID,weight,user_id,count (zzxb0Y,34.2,dVK7EAJd,5)

然后使用: -

STORE TOP INTO' hbase:// sample_data'使用org.apache.pig.backend.hadoop.hbase.HBaseStorage(sample_col:weight,sample_col:user_id,sample_col:count);