2012-04-17 36 views
0

我有一个名为User的表,有两列,一个名为visitorId,另一个名为friend,它是一个字符串列表。我想检查VisitorId是否在好友列表中。任何人都可以指导我如何访问地图功能中的表格列? 我无法了解如何从hbase中的地图功能输出数据。 我的代码如下:Hbase Map/reduce - 如何访问表中的各个列?

ublic class MapReduce { 

static class Mapper1 extends TableMapper<ImmutableBytesWritable, Text> { 

    private int numRecords = 0; 
    private static final IntWritable one = new IntWritable(1);  
    private final IntWritable ONE = new IntWritable(1); 
    private Text text = new Text(); 

    @Override 
    public void map(ImmutableBytesWritable row, Result values, Context context) throws IOException { 

     //What should i do here?? 
     ImmutableBytesWritable userKey = new ImmutableBytesWritable(row.get(), 0, Bytes.SIZEOF_INT); 

     context.write(userkey,One);  
    } 

      //context.write(text, ONE); 
     } catch (InterruptedException e) { 
      throw new IOException(e); 
     } 

    } 
} 



public static void main(String[] args) throws Exception { 
    Configuration conf = HBaseConfiguration.create(); 
    Job job = new Job(conf, "CheckVisitor"); 
    job.setJarByClass(MapReduce.class); 
    Scan scan = new Scan(); 
    Filter f = new RowFilter(CompareOp.EQUAL,new SubstringComparator("mId2")); 
    scan.setFilter(f); 
    scan.addFamily(Bytes.toBytes("visitor")); 
    scan.addFamily(Bytes.toBytes("friend")); 
    TableMapReduceUtil.initTableMapperJob("User", scan, Mapper1.class, ImmutableBytesWritable.class,Text.class, job); 

} 

}

回答

0

所以结果值实例将包含来自扫描仪整行。 从结果我会做这样的事情得到相应的列: -

VisitorIdVal = value.getColumnLatest(Bytes.toBytes(columnFamily1),Bytes.toBytes( “VisitorId”))

friendlistVal =价值。 getColumnLatest(Bytes.toBytes(columnFamily2),Bytes.toBytes( “好友列表”))

这里VisitorIdVal和friendlistVal是类型的keyValuehttp://archive.cloudera.com/cdh/3/hbase/apidocs/org/apache/hadoop/hbase/KeyValue.html的,得到他们的价值观了,你可以做一个Bytes.toString(VisitorIdVal .getValue()) 一旦你有前从列中提取值,您可以在“好友列表”中查看“VisitorId”