一、Mapreduce 类型传递错误
以下是部分源码(由map传递value数据类型到reduce去接受)
publicclass Order2User {
publicstaticclass OrderMapper extends Mapper<LongWritable, Text, Text, Text>{
String name =null;
@Override
protectedvoid setup(Mapper<LongWritable, Text, Text,Text>.Context context)
throws IOException, InterruptedException {
FileSplit ins = (FileSplit)context.getInputSplit();
name = ins.getPath().getName();
}
@Override
protectedvoid map(LongWritable key, Text value, Mapper<LongWritable, Text,Text, Text>.Context context)
throws IOException, InterruptedException {
if(name.endsWith(".txt")){
String[] split = value.toString().split(",");
User user = new User();
user.set(split[0], split[1], split[2], split[3], split[4]);
context.write(new Text(split[0]), new Text(user.toString()));
}else{
String[] split = value.toString().split(",");
String oid = split[0];
String uid = split[1];
context.write(new Text(uid), new Text(oid+"-o"));
}
}
}
publicstaticclass OrderReduce extends Reducer<Text, Text, Text, Text>{
@Override
protectedvoid reduce(Text key, Iterable<Text> value, Reducer<Text, Text, Text,Text>.Context context)
throws IOException, InterruptedException {
StringBuilder sb = new StringBuilder();
ArrayList<Text> list = new ArrayList<>();
//ArrayList<String>list = new ArrayList<>();//这是正确的写法。
for (Text va : value) {
if(va.toString().endsWith("-o")){
sb.append(va.toString()).append(" ");
}else{
list.add(va);
//list.add(va.toString());这是正确的
}
}
/* for (String ss : list) {
context.write(key, newText(ss.toString()+"--"+sb.toString()));
}*/
context.write(key, new Text(list.toString()+"-->"+sb.toString()));
}
}