2017-07-05 8 views
0

私のHBaseテーブルのカラム値のうちの1つのLong値を比較できません。私はJava APIを使用しています。以下はコードスニペットです。私は明らかにフィルタを満たすテーブルの値を持っています。Java Apiを使用したHbaseロング比較フィルタ

私は辞書編集の比較と、どのように長い比較を行うのかを知りたいと思います。

これは大変参考になります。 docによると、事前

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(); 
    } 

答えて

0

おかげで、あなたはバイト配列からロング値をデシリアライズされます、あなた自身のコンパレータを提供する必要があります。私が知っているように、デフォルトの比較は辞書編集的です。辞書編集の比較に関しては、this投稿が有用です。 thisポストは、対応する比較器をどのように書くことができるかの手がかりを提供します。

更新

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のグアバの依存関係と競合する可能性がありますので、私が代わりにグアバのHBaseのutilsの使用をお勧めします。

+0

コンパレータの書き込み方法がわからないので、サンプルコードを提供してください。 – hopeIsTheonlyWeapon

+0

2番目の記事を見ましたか? – gorros

+0

私は答えを更新しました。 – gorros

関連する問題