zoukankan      html  css  js  c++  java
  • spark实现从hbase中批量查询多个rowKey

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

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

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

      RowFilter用于过滤row key

    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。

    多个rowKey,rowKeyList是个rowKey的集合

    //存放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中

        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 操作

     

  • 相关阅读:
    删除Rancher节点的正确姿势
    go深度拷贝json版
    go深度拷贝gob版
    视频摘要视频浓缩
    教你如何用Jenkins自动化部署项目(教程,从零到搭建完成)
    EXCEL2010中如何使用数据透视表
    安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目
    什么是CMOS与BIOS?又有什么区别?
    Linux下面写Tomcat重启脚本
    平凡变成非凡
  • 原文地址:https://www.cnblogs.com/xuesheng/p/9633751.html
Copyright © 2011-2022 走看看