1
私はpictureによって記載されているように一つの入力ファイルと1つのアレイからの複数の出力ファイルを持っていると思います。私は親クラスProgram
のための「check
」と呼ばれる静的な属性を持っていることについて考えた
私の考え
。キーがチェックに等しい場合
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
をチェックする:main
方法において
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
}
// ...
、Iはループの "A"、 "B"、 "C" をするcheck
を割り当てることになります
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