2012-03-08 34 views
0

我已经在hbase中创建了一个表,每行有12列,每列有8个限定符。当我尝试读取完整的行时,它返回1:1的正确值,但返回null 1:2 它从2到10正确读取所有列.... PLZ帮助如何解决这个问题 即时通讯使用此代码阅读....它是内循环泰尔运行1至12 ..访问来自java的hbase表

train[0][i] = Double.parseDouble(Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("1")))); 
train[1][i] = Double.parseDouble (Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("2")))); 
train[2][i] = Double.parseDouble (Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("3")))); 
System.out.println("train" + i + ": " + train[2][i]); 
train[3][i] = Double.parseDouble (Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("4")))); 
train[4][i] = Double.parseDouble (Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("5")))); 
train[5][i] = Double.parseDouble (Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("6")))); 


train[6][i] = Double.parseDouble (Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("7")))); 
train[7][i] = Double.parseDouble (Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("8")))); 

回答

0

我没有看到任何理由将这些数据放入多个列族中。看来你可以把它全部放在一列中,并使用像“i_j”这样的寻址方案,其中i和j被索引替换。将事情放入多个列族中的问题是每个列族都有自己的存储文件,因此会占用更多的群集资源。另请考虑使用列名系列的最小字节数。

如果没有看到将数据插入到表中的代码以及从表中检索数据的完整代码,则无法诊断此问题。当然,你不需要无故重复生产线。尝试一下更简单:

byte[] column_family = Bytes.toBytes("a"); 
for (int i = 0; i < MAX_I; i++) { 
    for (int j = 0; j < MAX_J; j++) { 
    train[i][j] = Double.parseDouble(Bytes.toString(r.getValue(column_family, Bytes.toBytes(i+"_"+j); 
    System.out.println("train["+i+"]["+j+"]: "+train[i][j]); 
    } 
}