Я пытаюсь объединить два файла. Это моя (избыточная с исключениями отладки) функция сокращения:
Код: Выделить всё
public void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {
Text w1 = new Text();
Text w2 = new Text();
List arr = new ArrayList();
List debugging = new ArrayList();
long c_w1 = -1;
for(Text value: values){
debugging.add(value);
try{
StringTokenizer str = new StringTokenizer(value.toString());
if(str.countTokens() == 1){
throw new Exception("special exception1. countTokens: "+str.countTokens() + " c_w1: " + c_w1);
//context.write(key, value);
//continue;
}
w1 = new Text(str.nextToken());
w2 = new Text(str.nextToken());
if(str.countTokens() == 1){ // c(w1)
c_w1 = Long.parseLong(str.nextToken());
continue;
}
else if(value.toString().contains(uniqueWord)){
throw new Exception("special exception2. countTokens: "+str.countTokens() + " c_w1: " + c_w1);
}
else{ // an entire entry
if(value.toString().contains(uniqueWord))
throw new Exception("special exception3. countTokens: "+str.countTokens() + " c_w1: " + c_w1);
arr.add(value);
}
}catch(Exception e){
throw new IOException("key: "+key.toString() +" value: "+value.toString()+" the last stacktrace: "+e.getMessage());
}
}
for( Text value : arr){
try{
if(value.toString().contains(uniqueWord))
throw new Exception("special exception4. arr length: " +arr.size()+ " c_w1: " + c_w1);
Text ans = new Text("w1:"+c_w1);
context.write(value, ans);
}catch(Exception e){
throw new IOException("key: "+key.toString() +" value: "+value.toString()+" the last stacktrace: "+e.getMessage());
}
}
}
Error: java.io.IOException: key: N.T.O._NOUN value:
N.T.O._NOUN 43uireoaugibghui4reagf 13 the last stacktrace: special
exception4. длина arr: 1 c_w1: 13 в
JoinW1$ReducerClass.reduce(JoinW1.java:150) в
JoinW1$ReducerClass.reduce(JoinW1.java:1) в
org.apache. Hadoop.mapreduce.Reducer.run(Reducer.java:171) в
org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:635)
в org.apache.hadoop.mapred. УменьшитьTask.run(ReduceTask.java:390) по адресу
org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) по адресу
java.security.AccessController.doPrivileged (собственный метод) в
javax.security.auth.Subject.doAs(Subject.java:422) в
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
в org .apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Blockquote
Blockquote
Мало что не получается смысл здесь.
Во-первых, если специальное исключение 4 возникает из-за значения != uniqueWord, специальное исключение 3 должно было быть вызвано раньше!
Во-вторых, запись
Код: Выделить всё
N.T.O._NOUN 43uireoaugibghui4reagf 13
Worth mentioning that
Код: Выделить всё
String unqiueWord = "43uireoaugibghui4reagf"
The input im running the job on is these two files:
Код: Выделить всё
N.T.O._NOUN _NOUN_ 1960's 13
nt should_VERB 1960's 40
ntW _NOUN_ 1960's 12
nt_NOUN as_ADP 1960's 53
nt_VERB ^_NUM 1960's 17
nterpretat ion_NOUN 1960's 7
Код: Выделить всё
43uireoaugibghui4reagf ^_NUM 17
43uireoaugibghui4reagf _NOUN_ 25
43uireoaugibghui4reagf as_ADP 53
43uireoaugibghui4reagf ion_NOUN 7
43uireoaugibghui4reagf should_VERB 40
N.T.O._NOUN 43uireoaugibghui4reagf 13
nt 43uireoaugibghui4reagf 40
ntW 43uireoaugibghui4reagf 12
nt_NOUN 43uireoaugibghui4reagf 53
nt_VERB 43uireoaugibghui4reagf 17
nterpretat 43uireoaugibghui4reagf 7
Example:
Код: Выделить всё
ntW _NOUN_ 1960's 12
Код: Выделить всё
ntW 43uireoaugibghui4reagf 12
Код: Выделить всё
ntW _NOUN_ 1960's 12 w1:12
Источник: https://stackoverflow.com/questions/781 ... ason-about