不赞成使用Result类型中的raw()方法



在我们最新的CDH集群升级中,我们发现许多方法和类已经被弃用了。

String epochTimestamp = String.valueOf(values.raw()[0].getTimestamp());

我的PM已经要求我摆脱所有这些过时的功能,并用最新的功能替换相同的。

raw()

可以遍历:

result.listCells()

给你一个单元格,然后获取值,使用:

CellUtil.cloneValue(cell)

参见文档:

https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/CellUtil.html

例子:

for (Cell cell : result.listCells()) {
    String row = new String(CellUtil.cloneRow(cell));
    String family = new String(CellUtil.cloneFamily(cell));
    String column = new String(CellUtil.cloneQualifier(cell));
    String value = new String(CellUtil.cloneValue(cell));
    long timestamp = cell.getTimestamp();
    System.out.printf("%-20s column=%s:%s, timestamp=%s, 
        value=%sn", row, family, column, timestamp, value);
}

根据文档:

public List listCells()

创建此结果中单元格的排序列表。从HBase 0.20.5开始,这相当于raw()。

因此你的代码应该是这样的:
String epochTimestamp = String.valueOf(values.listCells().get(0).getTimestamp());

获取所有列和值,您可以像下面这样使用celltil:

    List<Cell> cells = listCells();
    Map<String, String> result = new HashMap<>();
    for (Cell c : cells) {
        result.put(Bytes.toString(CellUtil.cloneQualifier(c)),Bytes.toString(CellUtil.cloneValue(c)));
    }

最新更新