我正在使用HBase MapReduce(docs)从HBase表中读取字符串。以下是代码的一部分:
public void map(ImmutableBytesWritable row, Result values, Context context) throws IOException {
String testing = values.getValue(Bytes.toBytes("data"),Bytes.toBytes("lastLine")).toString();
try {
context.write(new ImmutableBytesWritable(Bytes.toBytes(testing)), new IntWritable(1));
} catch (InterruptedException e) {
throw new IOException(e);
}
}
}
有一个reducer将字符串输出到另一个HBase表,当我尝试用mapper中的一些硬代码字符串测试时,它可以正常工作。我已经从HBase shell检查了要读取的字符串是否设置正确。
但是,当我尝试将其作为行id输入HBase中的另一个表时,它将变为未知字符串,如下所示:
[B @ fe2851
column = result:count,timestamp = 1415868730030,value = \ x00 \ x00 \ x00 \ x01
[B @ fe331c
column = result:count,timestamp = 1415868730030,value = \ x00 \ x00 \ x00 \ x01
[B @ fe6526
column = result:count,timestamp = 1415868730030,value = \ x00 \ x00 \ x00 \ x01
[B @ fe7a98
column = result:count,timestamp = 1415868730030,value = \ x00 \ x00 \ x00 \ x01
以下是预期结果:
苹果
column = result:count,timestamp = 1415868730030,value = \ x00 \ x00 \ x00 \ x01
橙色
column = result:count,timestamp = 1415868730030,value = \ x00 \ x00 \ x00 \ x01
香蕉
column = result:count,timestamp = 1415868730030,value = \ x00 \ x00 \ x00 \ x01
菠萝
column = result:count,timestamp = 1415868730030,value = \ x00 \ x00 \ x00 \ x01
有关可能原因的任何线索?
答案 0 :(得分:2)
您正在编写数组的字符串名称[B@fe6526
或类似名称。
我想你想要这个:
byte[] testing = values.getValue(Bytes.toBytes("data"), Bytes.toBytes("lastLine"));
context.write(new ImmutableBytesWritable(testing), new IntWritable(1));