[HADOOP] 변수는 루프로 전달 될 수 없습니다
HADOOP변수는 루프로 전달 될 수 없습니다
I는 송신기 (ID, INT), 수신기 (ID, INT), 통신 시간 (INT)을 포함하는 데이터 프레임을 가지고있다.
A B C
1 5 10
1 6 20
1 7 20
1 8 11
내 목표는 최대의 통신 시간을 찾아 1 6,20로 반환하는 것입니다 (A, B로 형식, C) 최대 통신 시간 (20)가 모두 A1, B6 및 A1, B7 때문에, 난 그냥 작은 B의 ID 번호를 유지해야합니다.
지도 단계에서 이미 값으로 키로 (B, C를)를 분리.
지금까지 나는 A와 최대 C와 출력을 반환 할 수 있습니다,하지만 난 B 값을 반환하는 문제가있다. 내 코드는 아래의 min_Receiver을 변경할 수 없습니다, 어떻게이 문제를 해결할 수 있습니까?
public static class IntSumReducer
extends Reducer<Text,Text,Text,Text> {
//private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<Text> values,
Context context
) throws IOException, InterruptedException {
int max_val = 0;
int val_str = 0;
int val_str_1 = 0;
int min_Receiver = Integer.MAX_VALUE;
int tempReceiver = 0;
for (Text val : values) {
String[] compositeString = val.toString().split(",");
val_str = Integer.parseInt(compositeString[1]);
//tempReceiver = Integer.parseInt(compositeString[0]);
if( val_str>max_val) {
max_val = val_str;
}
}
for (Text val_1 : values){
String[] compositeString = val_1.toString().split(",");
tempReceiver = Integer.parseInt(compositeString[0]);
val_str_1 = Integer.parseInt(compositeString[1]);
if (val_str_1 == max_val && tempReceiver < min_Receiver)
{
min_Receiver =tempReceiver;
}
}
//result.set(max_val);
context.write(key, new Text(min_Receiver + "," + max_val));}}
출력이 될 것 기대
1 6,20
실제 출력은
1 2147483647,20
맵에서, I 이미 키로을 분리하고, 값 B, C. 그래서 compositeString는 두 변수가 포함되어 있습니다. 값의 형식은 C B이다.
해결법
-
==============================
1.당신의 구분이 무엇인지에 따라
당신의 구분이 무엇인지에 따라
최대 시간 텍스트를 얻기 위해이 같은 줄을 사용
Text answer = StreamSupport.stream(values.spliterator(),false).max(Comparator.comparingInt(s->getComTime(s))).orElse("");
이 같은 문자열에서 통신 시간을 얻는 방법을 만드는과 함께 :
private static int getComTime(Text line){ String[] vals = line.toString().split(","); return Integer.parseInt(vals[2]); }
당신이 = 연속 거짓 또는 병렬하려는 경우 .stream ()에 대한 부울 옵션은 = 사실 .... 당신의 구분은 다릅니다 또는 객체는 getComTime을 조정해야 할 수 있습니다 약간의 차이가 있지만, 이것은 오른쪽에 아주 가까이 할 필요가있는 경우 .
from https://stackoverflow.com/questions/58496984/variable-can-not-be-passed-into-for-loop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하둡은 TestDFSIO 벤치 마크를 2.6.0 (0) | 2019.10.22 |
---|---|
[HADOOP] 줄 바꿈하기 전에 너무 많은 바이트 : 스파크지도 / 필터 때 java.io.IOException를 던졌습니다 2147483648 (0) | 2019.10.22 |
[HADOOP] 오류 의사 분산 모드에서 mapred.map.tasks를 설정할 때 (0) | 2019.10.22 |
[HADOOP] 빈 RDD에 변환의 결과 (0) | 2019.10.22 |
[HADOOP] 윈도우 자바 응용 프로그램에서 Access 가상 상자 HBase를 (0) | 2019.10.22 |