我想在Hadoop中使用java设置多个列作为键和多个列作为mapreduce“键值对”类中的值,并且文件读取包含20列。谢谢
答案 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
应该是完全足够的。