2012-03-08 10 views
0

私はhbaseの各行に12列のテーブルを作成し、各列に8つの修飾子があります。完全な行を読み込もうとすると、1行目の1:1の正しい値が返されます。 1:2 すべての列を2から10に正しく読み込みます。 plzこの問題を解決する方法を教えてください このコードを読み込み用に使用しています....それは内側のforループですtharはfron 1〜12を実行します..アクセスhbaseテーブルからJava

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

このデータを複数の列ファミリに入れる理由はありません。あなたはそれをすべて1つの列に入れ、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]); 
    } 
} 
関連する問題