簡體   English   中英

使用Java Api的Hbase Long比較過濾器

[英]Hbase Long Comparison Filter using Java Api

我無法在我的HBase表的列值之一中比較Long值。 我正在使用Java API。 下面是代碼片段。我顯然在表格中有一個滿足過濾條件的值。

我還想知道什么是詞典比較以及如何進行長時間比較。

任何方向對此都大有幫助。

提前致謝

FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);
SingleColumnValueFilter fil = new SingleColumnValueFilter(CF1_BYTE, VALUE_BYTE, CompareOp.LESS,new BinaryComparator(Bytes.toBytes(50)));
 Scan scan = new Scan();
 scan.addColumn(Bytes.toBytes("C1"),Bytes.toBytes("VALUE"));
    list.addFilter(fil);
    scan.setFilter(list);
    try {
        ResultScanner scanner = table.getScanner(scan);

        for(Result r : scanner){
            String VAL = Bytes.toString(r.getValue(Bytes.toBytes("C1"),Bytes.toBytes("VALUE")));
            count ++;
            if(count == 1000){
                break;
            }
            System.out.println(count +"  "+Bytes.toString(r.getRow()) + "        "+VAL );
        }
        scanner.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        table.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

根據doc ,您必須提供自己的比較器,該比較器將從Byte數組中反序列化Long值。 據我所知,默認比較是按字典順序進行的。 關於詞典比較,您可以找到這篇文章有用。 這篇文章提供了如何編寫相應比較器的線索。

更新

import java.util.Comparator
import org.apache.hadoop.hbase.util.Bytes 

class LongComparator implements Comparator<byte[]> {
    public int compare(byte[] left, byte[] right) {
        long leftLong = Bytes.toLong(left);
        long rightLong = Bytes.toLong(right);
        return Long.compare(leftLong, rightLong);
    }
}

我建議使用HBase utils代替guava,因為它可能與HBase guava依賴項沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM