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 操做
相關文章
相關標籤/搜索