0

2つの列を持つUserというテーブルがあり、1つは呼び出されvisitorId、もう1つfriendは文字列のリストです。がフレンドリストに含まれているかどうかを確認したいと思いVisitorIdます。マップ関数のテーブル列にアクセスする方法について誰かに指示してもらえますか?hbaseのマップ関数からデータがどのように出力されるかを想像することはできません。私のコードは次のとおりです。

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

}

}

4

1 に答える 1

0

したがって、結果値インスタンスには、スキャナーからの行全体が含まれます。結果から適切な列を取得するには、次のようにします:-

VisitorIdVal = value.getColumnLatest(Bytes.toBytes(columnFamily1)、Bytes.toBytes( "VisitorId"))

friendlistVal = value.getColumnLatest(Bytes.toBytes(columnFamily2)、Bytes.toBytes( "friendlist"))

ここで、VisitorIdValとfriendlistValのタイプはkeyValue http://archive.cloudera.com/cdh/3/hbase/apidocs/org/apache/hadoop/hbase/KeyValue.htmlであり、それらの値を取得するにはBytesを実行できます。 toString(VisitorIdVal.getValue()) 列から値を抽出したら、「friendlist」で「VisitorId」を確認できます。

于 2012-04-19T18:35:24.160 に答える