Rag*_*ghu 4 java hadoop hbase scala mapreduce
我使用前缀过滤器获得了给定部分行键的扫描结果:
行键示例:123_abc、456_def、789_ghi
var prefix=Bytes.toBytes("123")
var scan = new Scan(prefix)
var prefixFilter = new PrefixFilter(prefix)
scan.setFilter(prefixFilter)
var resultScanner = table.getScanner(scan)
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是如何指定多个前缀过滤器作为扫描操作的输入。Result 对象应该包含所有具有给定前缀的行键值的行,比如 123 或 456。
我尝试了以下使用 FilterList 方法的答案,但无法获得所需的结果:
对此的任何帮助(在 Scala 或 Java 中)将不胜感激。谢谢你。
请检查此过滤器列表文档,您可能没有使用正确的选项...
FilterList.Operator.MUST_PASS_ALL (AND) 或 FilterList.Operator.MUST_PASS_ONE (OR)。由于您可以将过滤器列表用作过滤器列表的子项,因此您可以创建要评估的过滤器层次结构。FilterList.Operator.MUST_PASS_ALL 延迟评估:只要一个过滤器不包含 KeyValue,评估就会停止。FilterList.Operator.MUST_PASS_ONE 非惰性评估:始终评估所有过滤器。默认为 FilterList.Operator.MUST_PASS_ALL。
/* FilterList.Operator.MUST_PASS_ALL by default */
FilterList allFilters = new FilterList(FilterList.Operator.MUST_PASS_ONE);
allFilters.addFilter(new PrefixFilter(Bytes.toBytes("123")));
allFilters.addFilter(new PrefixFilter(Bytes.toBytes("456")));
allFilters.addFilter(new PrefixFilter(Bytes.toBytes("678")));
scan.setFilter(allFilters);
var resultScanner = table.getScanner(scan)
Run Code Online (Sandbox Code Playgroud)
由于您已经使用过FilterList
,我认为您可能已经使用了默认值,即MUST_PASS_ALL
需要满足所有前缀条件的原因可能就是它没有给出结果的原因。
前面提到的代码应该可以工作..祝你好运
归档时间: |
|
查看次数: |
4366 次 |
最近记录: |