用MR往HBase里写Int类型遇到了乱码问题,总结一下。
直接往HBase表里写int,通过shell查询
可以看到是一堆字节数组,hbase存储所有数据都是用过Byte数组的形式,但是里面除了String以外,其他类型通过shell查询,无法正常显示的,但是String类型的数据,shell则可以正常显示,这里我插入的是int自然无法正常显示。
这是在idea上写的查询hbase的方法,分别用Bytes.toInt和Byts.toString尝试读取hbase上的数据。
这是一部分结果,可以看到通过Bytes.toInt读取的int类型Byte数组,是可以正确显示,而通过Bytes.toString方式尝试读取则乱码。
看到这里其实大概已经了解了,但是我遇到了一点小问题,所以继续测试。
新建一张表,通过shell,往里面插入两个int类型的数据,但是通过shell查询,查询结果并非Byte数组,难道HBase将他们转换成了String?
通过idea上方法测试,可以看到Bytes.toString方法将结果转化正确,而Bytes.toInt则错误。所以可以认为通过shell可以读取到的数据类型,只有String。通过shell插入的int类型只不过是与int类型值相同的String类型。