如何从HBase结果中读取字符串?

时间:2014-11-13 09:08:38

标签: java hadoop hbase

我正在使用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

有关可能原因的任何线索?

1 个答案:

答案 0 :(得分:2)

您正在编写数组的字符串名称[B@fe6526或类似名称。

我想你想要这个:

byte[] testing = values.getValue(Bytes.toBytes("data"), Bytes.toBytes("lastLine"));
context.write(new ImmutableBytesWritable(testing), new IntWritable(1));