您的位置:首页 > 产品设计 > UI/UE

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

2017-02-17 15:38 357 查看
代码如下:

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());

人与人的差距
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐