0
表(声明:我很新的Hadoop和Java)“透视”使用Hadoop
作为输入,有一个简单的键值结构的表格:
key1 value1
key2 value2
key3 value3
key2 value4
key1 value5
key1 value6
由于输出,我想收集属于特定的键,每个键的所有值,所以是这样的:
key1, value1 value5 value6
key2, value2 value4
key3, value3
这里是我的映射:
public class WordMapper extends Mapper<Object, Text, Text, Text> {
@Override
public void map(Object key, Text value,
Context context) throws IOException, InterruptedException {
String[] fields = value.toString().split("\\t", -1);
for (int i = 0; i < fields.length; ++i) {
if ("".equals(fields[i])) fields[i] = null;
}
List<String> fields_list = Arrays.asList(fields);
Text textKey = new Text(fields_list.get(0));
Text textValue = new Text(fields_list.get(1));
context.write(textKey,textValue);
}
}
这里是减速机:
public class SumReducer extends Reducer<Text, TextArrayWritable, Text, TextArrayWritable> {
private TextArrayWritable valuesTotal = new TextArrayWritable();
public void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
ArrayList<Text> values_list = new ArrayList<Text>();
for (Text value : values) {
values_list.add(value);
}
Text[] values_arr = new Text[values_list.size()];
values_arr = values_list.toArray(values_arr);
valuesTotal.setFields(values_arr);
context.write(key, valuesTotal);
}
}
出于某种原因,我无法从我的程序得到任何输出。它只是终止,不在输出文件夹中。我这里有什么问题?
(I使用的Hadoop 2.2.0和Eclipse + hadoop的插件。例如字计数没有问题运行。)
请问你TextArrayWritable类是什么样子? – Willmore
我解决了问题并摆脱了课堂,因为这里并不是真的需要 – Timofey