Java HBase addColumn和setFilter

Java HBase addColumn和setFilter,java,hadoop,hbase,bigdata,Java,Hadoop,Hbase,Bigdata,我正在扫描HBase,方法是将Scanner设置为只包含我想要的特定列名和使用列过滤器的一系列列 添加单个行: known_fields.forEach(known_field ->scanner.addColumn("x".getBytes(), known_field.getBytes())); 我还添加了一个列过滤器: scanner.setFilter(new ColumnRangeFilter(start, true, stop, true)); 所有变量都有正确的值。我扫描

我正在扫描HBase,方法是将Scanner设置为只包含我想要的特定列名和使用列过滤器的一系列列

添加单个行:

known_fields.forEach(known_field ->scanner.addColumn("x".getBytes(), known_field.getBytes()));
我还添加了一个列过滤器:

scanner.setFilter(new ColumnRangeFilter(start, true, stop, true));
所有变量都有正确的值。我扫描如下

    scanner.setCacheBlocks(false);
    scanner.setBatch(1000);

    ResultScanner results = null;
    Table table = null;
    try {
        table = connection.getTable("table_test");
        results = table.getScanner(scanner);
        boolean hasPerformed;
        for (final Result result : results) {
        ...
结果
始终为空。但是,如果我注释掉
scanner.setFilter(newColumnRangeFilter(start,true,stop,true))
scanner.addColumn(
),结果非常好。它与组合不起作用


如何实现已知列和一系列列的组合?

如果扫描器的列数较少。addColumn,则可以使用with
MUST\u PASS\u ONE
运算符并将其乘以
ColumnRangeFilter
。添加要扫描的列是否等同于添加ColumnRangeFilter开始和结束列。例如

Filter filter = new FilterList(FilterList.Operator.MUST_PASS_ONE);
known_fields.forEach(known_field -> 
      filter.addFilter(new ColumnRangeFilter(known_field.getBytes(), true, 
                                             known_field.getBytes(), true));
filter.add(new ColumnRangeFilter(start, true, stop, true));
scan.setFilter(filter);

你可以在这个线程中找到答案:@maxteneff:谢谢。但是解决方案是完全删除addColumn,因为在这种情况下,addColumn属性是ColumnRange的一部分。我的用例不同。我需要使用
扫描
,而不是
获取