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

Hadoop:如何在Hadoop中的mapreduce类中将多个列设置为键,将多个列设置为值,hadoop,mapreduce,hbase,hdfs,Hadoop,Mapreduce,Hbase,Hdfs,我想使用java在Hadoop中的mapreduce“key-value pairs”类中将多个列设置为键,并将多个列设置为值,从中读取的文件包含20个列。谢谢将要作为键和值发出的所有列合并到一个分隔字符串中,并将它们作为文本发出 假设您的输入如下所示: 不,姓名,年龄,国家 1,塔里克,25岁,印度 2,samy,25,xyz 您希望发出“No+Age”作为键,“Name+Country”作为值 public static class MyMapper extends Mapper<Lo

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

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

假设您的输入如下所示:

不,姓名,年龄,国家

1,塔里克,25岁,印度

2,samy,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));
        }
}
公共静态类MyMapper扩展了Mapper{
字符串行=”;
字符串val=”“;
字符串[]部分;
字符串键=”;
公共void映射(LongWritable键、文本值、上下文上下文)引发IOException、InterruptedException{
line=value.toString();
零件=直线分割(“,”);
键=零件[0]+“+”零件[2];
val=零件[1]+“+”零件[3];
编写(新文本(键),新文本(值));
}
}

您可以创建一个复合对象,
实现可写可比
以简洁的形式将键存储在一起。请参阅以获取一个好的示例


然而,鉴于您需要20个组件,我可能建议只使用一个
Text
对象,并在适当的时候对其进行解析。我经常使用制表符分隔的值,并使用自定义TSV解析器对其进行解析,但仅使用合适的分隔符
char
拆分
文本即可。请告诉我答案有什么问题,以免我重复错误。非常感谢。