从java访问hbase表

从java访问hbase表,hbase,Hbase,我在hbase中创建了一个表,每行有12列,每列有8个限定符。当我尝试读取完整的行时,它在第1行中返回正确的1:1值,但在1:2时返回null 它正确读取2到10…之间的所有列。。。。 plz如何帮助解决这个问题 我用这段代码来阅读…它是运行在1到12之间的for循环的内部 train[0][i] = Double.parseDouble(Bytes.toString (r.getValue(Bytes.toBytes(Integer.toString(i)), Bytes.toBytes("1

我在hbase中创建了一个表,每行有12列,每列有8个限定符。当我尝试读取完整的行时,它在第1行中返回正确的1:1值,但在1:2时返回null 它正确读取2到10…之间的所有列。。。。 plz如何帮助解决这个问题 我用这段代码来阅读…它是运行在1到12之间的for循环的内部

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"))));

我看不出有任何理由将此数据放入多个列族中。看起来你可以把它全部放在一列中,使用像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]);
  }
}