2017-09-29 3 views
1

단일 열 값 필터를 적용한 후 HBase에서 선택한 열 패밀리의 행을 가져 오려고합니다. 내 테이블 'Projectdata'에서HBase에서 출력 형식 지정

나는

name|story|type|keyword 

    aritra| kl |ac |happy 
    nill |jk |bc |sad 
    bob |pk |dd |happy 

같은 열 가족이있다. 나는 그들의 '키워드'가 행복 할 때 '이름'의 목록을 얻고 싶다. 내 코드는 다음과 같습니다.

public class ByCategory { 

    public static void main(String [] args) throws Exception{ 

     Configuration conf = HBaseConfiguration.create(); 
     HTable table = new HTable(conf, "Projectdata"); 

     SingleColumnValueFilter filter_by_happycategory = new SingleColumnValueFilter(
       Bytes.toBytes("keyword"), 
       Bytes.toBytes(""), 
       CompareOp.EQUAL, 
       Bytes.toBytes("happy") 
       ); 
     FilterList filterListk =new FilterList(); 
     filterListk.addFilter(filter_by_happycategory); 

     Scan scanh = new Scan(); 
     scanh.addFamily(Bytes.toBytes("name")); 
     scanh.addFamily(Bytes.toBytes("keyword")); 
     scanh.setFilter(filterListk); 


     ResultScanner scannerh = table.getScanner(scanh); 
     String key = new String("~"); 
     String keyFlag = new String("~"); 
     System.out.println("Scanning table... "); 

      for(Result resulth: scannerh){ 
       //System.out.println("getRow:"+Bytes.toString(resulth.getRow())); 
       key = "~"; 
       for(KeyValue kv:resulth.raw()) 
       { 
        if(key.compareTo(keyFlag)==0){ 
         key=Bytes.toString(kv.getRow()); 
         System.out.print("Key: "+key); 
        } 
        System.out.print(Bytes.toString(kv.getValue())); 

       } 
       System.out.println(""); 

      } 
      scannerh.close(); 
      System.out.println("complete"); 
      table.close(); 
     } 

    } 

나는이

Key: 102happybob 
Key: 109happyaritra 

같은 출력에 geting 오전하지만 난 단지 이름을 싶어. 나는 얻으 려하고있다

Key: 102bob 
Key: 109aritra 

hbase에서 가능합니까? 실제로 내 잘못은 어디 있습니까?

+0

귀하의 질문은 지저분하고 명확하지 않습니다. 당신은 'name'열에서 {aritra, nill, bob, jakob}과 같은 값을 갖고 'keyword'열 ({happy, sad, emotional} 등)에서 'scanh.addFamily (Bytes.toBytes name ")); '이 칼럼이나 컬럼도 마찬가지입니까? –

+0

죄송합니다. 질문을 수정했습니다. 이 모든 것들은 컬럼 패밀리입니다. – Yonex

+0

여전히 명확하지 않은데, columnfamily가 열 이름없이 값을 가질 수있는 방법은 행 키 또는 열 이름입니까? 이전 대답을 제거하고 질문이 명확 해지면 대답 할 것입니다. –

답변

1

사용

for(Result resulth: scannerh){ 
     System.out.println("Key: "+Bytes.toString(resulth.getRow())+Bytes.toString(resulth.getValue(Bytes.toBytes("name"),Bytes.toBytes("")))); 
    } 

당신은 .getValue은 (columnfamily, 열) 당신에게 당신의 경우는 ""입니다 특정 컬럼의 값을 제공하는 동안 rowkey 제공) (원하는 output.Here resulth.getRow를 얻을 수 .