我在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?
答案 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))));