2012-03-08 59 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]); 
    } 
}