Hbase自定义过滤器

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterBase;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

//自定义过滤器  实际用的时候要进行序列化
public class ColumnCompareFilter extends FilterBase {

    private String columnAName;
    private String columnBName;
    private byte[] columnAValue;
    private byte[] columnBValue;

    public ColumnCompareFilter(String columnAName,String columnBName){
        this.columnAName = columnAName;
        this.columnBName = columnBName;
    }

    @Override
    public ReturnCode filterKeyValue(Cell cell) throws IOException {
        String[] columnAInfo = StringUtils.split(columnAName, ":");
        //判断cell的列簇和列和我们指定的是否相同
        if(CellUtil.matchingColumn(cell,Bytes.toBytes(columnAInfo[0]),Bytes.toBytes(columnAInfo[1]))){
            //获取值
            columnAValue = CellUtil.cloneValue(cell);
        }

        String[] columnBInfo = StringUtils.split(columnBName, ":");
        if(CellUtil.matchingColumn(cell,Bytes.toBytes(columnBInfo[0]),Bytes.toBytes(columnBInfo[1]))){
            columnBValue = CellUtil.cloneValue(cell);
        }
        //返回码,结果要包含keyvalue
        return ReturnCode.INCLUDE;
    }
    public boolean hasFilterRow() {
        return true;
    }

    //进行比较
    public boolean filterRow() throws IOException {
        int columnAValueInt = Bytes.toInt(columnAValue);
        int columnBValueInt = Bytes.toInt(columnBValue);
        return columnAValueInt<=columnBValueInt;
    }

    //每次调用新行的时候被调用
    public void reset() throws IOException {
        this.columnAValue = null;
        this.columnBValue =null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值