当前位置:首页 > 开发 > 开源软件 > 正文

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

发表于: 2013-11-21   作者:BlackWing   来源:转载   浏览次数:
摘要: 转载请标明出处: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);
转载请标明出处: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()



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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
http://www.cnblogs.com/chenjingjing/archive/2010/01/26/1656869.html 最适合使用Hbase存储的数据
http://www.cnblogs.com/chenjingjing/archive/2010/01/26/1656869.html 最适合使用Hbase存储的数据
原创文章,请各位多多指导,有错误希望各位能及时告诉我,感激不尽~ (1) Put put = new Put(key);
问题描述: 使用 mvn clean install 的时候,会打的包中增加一些源码中没有的class。 mvn1.jpg (56.
hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些
flow: FAQ: -why META table can not be splited? if u try to split the table 'meta',u will see
场景 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加
Text是Hadoop中的一个Writable类,定义了Hadoop中的其中的数据类型以及操作。   This class store
首先,解决talend连接hbase的问题: 公司使用的机器是HDP2.2的机器,上面配置好Hbase服务,在集群的
在做Hadoop的编程时,有时会用到HBase,常常涉及到把HDFS上面的数据导入到HBase中,在这个操作中,r
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号