从java访问hbase表

时间:2012-03-08 09:25:56

标签: hbase

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

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

1 个答案:

答案 0 :(得分: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]);
  }
}