hbase-map(ImmutableBytesWritable key,Result value,Context context)数据解析

代码如下:

public static class CountMapper extends TableMapper<ImmutableBytesWritable ,Put>
    {
        public void map(ImmutableBytesWritable key,Result value,Context context){
            byte[] b=key.get();
            String test="";
            System.out.println("key开始:");
            for(int i=0;i<b.length;i++)
            {test=Byte.toString(b[i]);System.out.println(test+"");}
            System.out.println("key="+key.toString()+":::::value="+value.toString());
        }
    }


Hbase 的ImmutableBytesWritable类型,如果直接Systemout是一个类似与16进制的byte[];

直接System.out.println("key="+key+":::::value="+value.toString());的表结果如下:

key=42 79 65:::::value=keyvalues={Bye/content:count/1487064847469/Put/vlen=1/seqid=0}
key=47 6f 6f 64 62 79 65:::::value=keyvalues={Goodbye/content:count/1487064847469/Put/vlen=1/seqid=0}
key=48 61 64 6f 6f 70 65:::::value=keyvalues={Hadoope/content:count/1487064847469/Put/vlen=1/seqid=0}
key=48 65 6c 6c 6f 70 65:::::value=keyvalues={Hellope/content:count/1487064847469/Put/vlen=1/seqid=0}
key=57 6f 72 6c 64 70 65:::::value=keyvalues={Worldpe/content:count/1487064847469/Put/vlen=1/seqid=0}


使用上面代码后表结果如下:

key开始:
66
121
101
key=42 79 65:::::value=keyvalues={Bye/content:count/1487064847469/Put/vlen=1/seqid=0}
key开始:
71
111
111
100
98
121
101
key=47 6f 6f 64 62 79 65:::::value=keyvalues={Goodbye/content:count/1487064847469/Put/vlen=1/seqid=0}
key开始:
72
97
100
111
111
112
101
key=48 61 64 6f 6f 70 65:::::value=keyvalues={Hadoope/content:count/1487064847469/Put/vlen=1/seqid=0}
key开始:
72
101
108
108
111
112
101
key=48 65 6c 6c 6f 70 65:::::value=keyvalues={Hellope/content:count/1487064847469/Put/vlen=1/seqid=0}
key开始:
87
111
114
108
100
112
101

key=57 6f 72 6c 64 70 65:::::value=keyvalues={Worldpe/content:count/1487064847469/Put/vlen=1/seqid=0}


可以看出,如57 6f 72 6c 64 70 65就是16进制的字符,代码改为

public void map(ImmutableBytesWritable key,Result value,Context context){
            String test="";
            System.out.println("key开始:");
            String[] x=key.toString().split(" ");
            for(int i=0;i<x.length;i++){x[i]=toStringHex(x[i]);test=test+""+x[i];}
            System.out.println("key="+test+":::::value="+value.toString());
        }

public static String toStringHex(String s)
    {
     byte[] baKeyword = new byte[s.length()/2];
      for(int i = 0; i < baKeyword.length; i++)
      {
       try
       {
        baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
       }
       catch(Exception e)
       {
        e.printStackTrace();
       }
      }
      
     try
     {
      s = new String(baKeyword, "utf-8");//UTF-16le:Not
     }
     catch (Exception e1)
     {
      e1.printStackTrace();
     }
     return s;
    }

输出为:

key开始:
key=Bye:::::value=keyvalues={Bye/content:count/1487064847469/Put/vlen=1/seqid=0}
key开始:
key=Goodbye:::::value=keyvalues={Goodbye/content:count/1487064847469/Put/vlen=1/seqid=0}
key开始:
key=Hadoope:::::value=keyvalues={Hadoope/content:count/1487064847469/Put/vlen=1/seqid=0}
key开始:
key=Hellope:::::value=keyvalues={Hellope/content:count/1487064847469/Put/vlen=1/seqid=0}
key开始:
key=Worldpe:::::value=keyvalues={Worldpe/content:count/1487064847469/Put/vlen=1/seqid=0}


显然上面方法极其愚蠢,聪明的hbase书写者肯定考虑过这个问题,

于是问了大神,大神表示这么写就行了:

String abc=Bytes.toString(key.get());


人与人的差距快哭了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值