Hadoop:如何将多个列设置为键,将多个列设置为Hadoop中mapreduce类中的值

时间:2013-04-24 13:08:40

标签: hadoop mapreduce hbase hdfs

我想在Hadoop中使用java设置多个列作为键和多个列作为mapreduce“键值对”类中的值,并且文件读取包含20列。谢谢

2 个答案:

答案 0 :(得分:0)

将您要发出的所有列作为键和值组合成一个分隔的字符串,并将它们作为文本发出。

假设您的输入如下所示:

没有,姓名,年龄,国家

1,塔里克,25,印度

2,萨米,25,XYZ

你想发出“No + Age”作为键,“Name + Country”作为值。

public static class MyMapper extends Mapper<LongWritable, Text, Text, Text> {

        String line = "";
        String val = "";
        String[] parts;
        String key = "";

        public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

            line = value.toString();
            parts = line.split(",");
            key = parts[0] + "." + parts[2];
            val = parts[1] + "." + parts[3];
            context.write(new Text(key), new Text(value));
        }
}

答案 1 :(得分:0)

您可以创建一个复合对象implements WritableComparable<YourClassName>以简洁的形式存储密钥。请参阅this link以获取一个好例子。

然而,看到你想要20个组件,我可能建议只使用一个Text对象并在适当的时候解析它。我经常使用制表符分隔值并使用自定义TSV解析器解析它们,但仅仅使用合适的分隔符Text.toString()拆分char应该是完全足够的。