1
我想由picture描述從一個輸入文件和一個陣列具有多個輸出文件。
我的想法
我想過有一個名爲「check
」爲Program
父類的靜態屬性。
public class Program
{
//Attribute check
private static String check = null;
public static class ProgramMapper extends Reducer<Object, Text, Text, Text>{
// mapping
}
public static class ProgramReducer extends Reducer<Object, Text, Text, TextArray>{
// reducing
}
public static void main(String[] args){
// main program
}
// ...
在main
方法,我會分配check
對 「一」, 「B」, 「C」 在一個循環:
public static void main(String[] args) throws Exception{
// Array of checkpoints
String[] arr = {"a", "c", "f"};
// Loop for assigning check
for(int j = 0; j<arr.length ; j++){
check = arr[j];
// job configuration
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
Job job = new Job(conf, "Program");
//...
for (int i = 0; i < otherArgs.length - 1; ++i){
FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
}
/* here I define multiple outputs */
FileOutputFormat.setOutputPath(job,new Path(otherArgs[otherArgs.length - 1]+j));
job.waitForCompletion(true);
if (j == arr.length -1){
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
的reducer
將檢查如果鍵是等於檢查
public static class ProgramReducer extends Reducer<Object, Text, Text, TextArray>{
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
ArrayList<Text> result = new ArrayList<Text>();
String key1 = key.toString();
// check if the key is equal to check
if (key1.equals(check)){
result.add(new Text("o"));
}else{
result.add(new Text("x"));
}
// other reducing code
}
}
問題
check
永遠不會分配給「a」,「b」,「c」,所以我有3個輸出文件全部未選中。
我該如何解決這個問題?
謝謝!有效! – EyTea