spark实现从hbase中批量查询多个rowKey

需求:参数是多个没有顺序的rowKey,在某张表中批量查询。一个一个rowKey查询的话,效率过低。正则表达式

实现:须要在scan中添加filter。filter中添加多个rowKey,对须要查询的rowKey进行限制。x表明rowKey。spa

val rowKeyFilter=new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes(x)))

  RowFilter用于过滤row keyscala

Operator Description
LESS 小于
LESS_OR_EQUAL 小于等于
EQUAL 等于
NOT_EQUAL 不等于
GREATER_OR_EQUAL 大于等于
GREATER 大于
NO_OP 排除全部

 

Comparator Description
BinaryComparator 使用Bytes.compareTo()比较
BinaryPrefixComparator 和BinaryComparator差很少,从前面开始比较
NullComparator Does not compare against an actual value but whether a given one is null, or not  null.
BitComparator Performs a bitwise comparison, providing a BitwiseOp class with OR, and XOR operators.
RegexStringComparator 正则表达式
SubstringComparator 把数据当成字符串,用contains()来判断

在这里使用EQUAL,BinaryComparator。code

多个rowKey,rowKeyList是个rowKey的集合orm

//存放rowKeyFilter的filter
var filters = new util.ArrayList[Filter]
rowKeyList.foreach(x=>{
val rowKeyFilter=new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes(x)))
      filters.add(rowKeyFilter)
    })

  而后将filters添加到 FilterList中blog

val filterList: FilterList = new FilterList(FilterList.Operator.MUST_PASS_ONE,filters)

scan.setFilter(filterList)
 FilterList.Operator.MUST_PASS_ALL --> 取交集 至关一and操做 FilterList.Operator.MUST_PASS_ONE --> 取并集 至关于or 操做
相关文章
相关标签/搜索