java - HBase addColumn 和 setFilter

标签 java hadoop hbase bigdata

我通过仅使用我想要的特定列名称和使用列过滤器的列范围设置扫描仪来扫描 HBase。

添加单独的行:

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) {
        ...

results 始终为空。但是,如果我注释掉 scanner.setFilter(new ColumnRangeFilter(start, true, stop, true));scanner.addColumn(,结果非常好。它不适用于组合。

如何实现已知列与范围列的组合?

最佳答案

如果 scanner.addColumn 的列数较少,您可以使用 FilterList使用 MUST_PASS_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);

关于java - HBase addColumn 和 setFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33915006/

相关文章:

java - 如何将单元格值与字符串进行比较并计算hbase中的频率?

java - 使用 HashMap 和 ArrayList 查找数据集的模式。想不通

java - 如何为数组中创建的对象分配和获取值?

java - 如何协调 JMS 浏览器和消费者?

hadoop - 如何在 EMR 上安装 cloudera impala?

sql - 改变 hive 中的现有 map

java - Hbase java.lang.NoClassDefFoundError:org/apache/hadoop/hbase/MasterNotRunningException

Java解析文本文件并保留换行符?

Hadoop级联: CascadeException "no loops allowed in cascade" when cogroup pipes twice

python - Hbase超时错误不断出现