Hadoop的Text类getBytes字节数据put到HBase后有多余字符串问题

本文转载于博客:http://blackwing.iteye.com/blog/1978501

转载请注明原博主博客地址 

转载请标明出处:http://blackwing.iteye.com/blog/1978501 

org.apache.hadoop.io.Text里面的getBytes方法有个小坑。

先看现场:  

String s = "91223224-20131120-96413376-150";
		Text t = new Text();
		t.set(s);
		Put put = new Put(t.getBytes());//*1
		put.add("kq".getBytes(), "0".getBytes(),"1".getBytes());
		List<Put> puts = new ArrayList<Put>();
		puts.add(put);
		Put put2 = new Put(t.toString().getBytes());//*2
		put2.add("kq".getBytes(), "1".getBytes(),"2".getBytes());
		puts.add(put2);
		try {
			table.batch(puts);
			table.flushCommits();
			table.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 


其中标注的地方就是差别所在。如果按照*1方式put到hbase,跟按照*2方式put到hbase得到的数据如下: 

91223224-20131120-96413376-150\x00\x00\x00
91223224-20131120-96413376-150


原因是getBytes获得的字节数组长度跟Text.getLength获得的长度不一致,不足的地方Text会自动补全。 

String s = "91223224-20131120-96413376-150";
Text t = new Text();
t.set(s);
System.out.println(t.getLength()+"  |  "+t.getBytes().length);

输出结果是:30  |  33 

所以如果要把Text的内容put到hbase,最保险的方式是先转换为String在获得字节数组Text.toString().getBytes() 
转载请标明出处:http://blackwing.iteye.com/blog/1978501 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值