val s = new Scan()
s.addFamily(family.getBytes)
val filterList = new FilterList()
filterList.addFilter(new PrefixFilter(Bytes.toBytes(prefixOfRowKey)))
filterList.addFilter(new RowFilter(CompareOp.GREATER_OR_EQUAL, new BinaryComparator(valueForBinaryFilter.getBytes())))
s.setFilter(filterList)
val scanner = table.getScanner(s)
3条答案
按热度按时间ghhaqwfi1#
模糊行方法对于这种需求是有效的,并且当数据量很大时:正如本文所解释的,模糊行过滤器将参数作为行键和掩码信息。
在上面的例子中,如果我们想找到最后登录的用户,并且行键格式是
userId_actionId_timestamp
(其中userId
有固定长度的说4个字符),模糊行键,我们正在寻找的是????_login_
. 这将转换为fuzzyrowkey的以下参数:建议您阅读hbase的最终指南-->客户端api:高级功能
4dc9hkyq2#
我通过使用以下过滤器解决问题:
PrefixFilter
(我把行键的第一部分放到这个过滤器中。在我的例子中-string id,例如“string\u id1.”)RowFilter
(我提出了两个参数:第一-CompareOp.GREATER_OR_EQUAL
,second-具有必要时间戳的所有行键,例如“string_id1.1470913345000”结果我得到了所有带有行键的单元格,这是必需的
string_id
如果是第一部分,并且时间戳大于或等于我放在过滤器的第二部分。这正是我想要的。代码段:
感谢所有帮助找到解决方案的人。
i86rm4rw3#
假设你的行以某种方式结束在一元可遍历结构中,比如list或rdd。现在,你只想用
id = "string_id2"
以及timestamp > 1470913345000
.现在有什么问题?只需根据这两个条件过滤可遍历的一元结构。