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

nfzehxib  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(530)

我想用java在hadoop的mapreduce“key-value-pairs”类中设置多个列作为键,多个列作为值,从中读取的文件包含20个列。谢谢

mhd8tkvw

mhd8tkvw1#

将要作为键和值发出的所有列合并为带分隔符的字符串并作为文本发出。
假设您的输入如下所示:
不,姓名,年龄,国家
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));
        }
}
dl5txlt9

dl5txlt92#

你可以做一个复合物体 implements WritableComparable<YourClassName> 以简洁的形式把钥匙存储在一起。请参阅此链接以获取一个好的示例。
但是,考虑到您需要20个组件,我可能建议只使用一个 Text 对象,并在适当时对其进行分析。我经常使用制表符分隔的值,并使用定制的tsv解析器对它们进行解析,但只是将 Text.toString() 使用合适的分隔符 char 应该足够了。

相关问题