hbase从java api获取错误的值

时间:2018-07-09 00:35:31

标签: java hbase

我在hbase中创建了一个用户表,并在值下方输入

 hbase(main):002:0> create '/mapr/gold1m7cluster/axp/gcp/coddem7/dev/USER','USER_FAMILY'
0 row(s) in 0.0250 seconds

hbase(main):005:0> put '/mapr/gold1m7cluster/axp/gcp/coddem7/dev/USER' , 'User_1' ,  'USER_FAMILY:Id' , '1'
0 row(s) in 0.0020 seconds
hbase(main):006:0> put '/mapr/gold1m7cluster/axp/gcp/coddem7/dev/USER' , 'User_1' ,  'USER_FAMILY:name' , 'Hemanth'
0 row(s) in 0.0030 seconds
hbase(main):007:0>  put '/mapr/gold1m7cluster/axp/gcp/coddem7/dev/USER' , 'User_1' ,  'USER_FAMILY:Bday' , '1999-09-24'

从Java Api获取失败。 我正在使用spring boot和hbase模板。 以下是错误

  

由以下原因引起:java.lang.IllegalArgumentException:偏移量(0)+长度(4)   超出阵列的容量:1           在com.mapr.org.apache.hadoop.hbase.util.Bytes.explainWrongLengthOrOffset(Bytes.java:595)           在com.mapr.org.apache.hadoop.hbase.util.Bytes.toInt(Bytes.java:765)           在com.mapr.org.apache.hadoop.hbase.util.Bytes.toInt(Bytes.java:741)           在com.hemanth.spring.basics.spring_in_5_steps.UserDaoService $ 1.mapRow(UserDaoService.java:140)           在com.hemanth.spring.basics.spring_in_5_steps.UserDaoService $ 1.mapRow(UserDaoService.java:137)           在org.springframework.data.hadoop.hbase.RowMapperResultsExtractor.extractData(RowMapperResultsExtractor.java:47)           在org.springframework.data.hadoop.hbase.RowMapperResultsExtractor.extractData(RowMapperResultsExtractor.java:30)           在org.springframework.data.hadoop.hbase.HbaseTemplate $ 1.doInTable(HbaseTemplate.java:134)           在org.springframework.data.hadoop.hbase.HbaseTemplate.execute(HbaseTemplate.java:61)           在org.springframework.data.hadoop.hbase.HbaseTemplate.find(HbaseTemplate.java:129)           在org.springframework.data.hadoop.hbase.HbaseTemplate.find(HbaseTemplate.java:158)           在org.springframework.data.hadoop.hbase.HbaseTemplate.find(HbaseTemplate.java:146)           在com.hemanth.spring.basics.spring_in_5_steps.UserDaoService.findAll(UserDaoService.java:137)           在com.hemanth.spring.basics.spring_in_5_steps.SpringIn5StepsApplication.main(SpringIn5StepsApplication.java:16)

我试图打印从数据库检索到的值

public User mapRow(Result result, int rowNum) throws Exception {
                **System.out.println(" length of the Id is " + result.getValue(CF_INFO, Id).toString().length()) ;
                System.out.println(" the Id is " + result.getValue(CF_INFO, Id).toString()) ;**
                return new User(Math.round( toFloat(result.getValue(CF_INFO, name))),
                        Bytes.toString(result.getValue(CF_INFO, name)),
                        ConvertStringDate(Bytes.toString(result.getValue(CF_INFO, Bday))));

我正在
id的长度是11  id是[B @ 351d0846

如何获取正确的ID?

2 个答案:

答案 0 :(得分:0)

我发现了问题。 在下面的语句中,Id存储为字符串而不是浮点值。 我们需要将其读取为字节字符串。将其转换为字符串然后浮动以解决问题。

User(Math.round(toFloat(result.getValue(CF_INFO,Id)))

答案 1 :(得分:0)

新用户(Integer.valueOf(Bytes.toString(result.getValue(CF_INFO,Id)))) Bytes.toString(result.getValue(CF_INFO,name)),ConvertStringDate(Bytes.toString(result.getValue(CF_INFO,Bday))));