Hadoop:如何在Hadoop中的mapreduce类中将多个列设置为键,将多个列设置为值
我想使用java在Hadoop中的mapreduce“key-value pairs”类中将多个列设置为键,并将多个列设置为值,从中读取的文件包含20个列。谢谢将要作为键和值发出的所有列合并到一个分隔字符串中,并将它们作为文本发出 假设您的输入如下所示: 不,姓名,年龄,国家 1,塔里克,25岁,印度 2,samy,25,xyz 您希望发出“No+Age”作为键,“Name+Country”作为值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
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
拆分文本即可。请告诉我答案有什么问题,以免我重复错误。非常感谢。