У меня есть фрейм данных, включающий отправителя (id, int), получателя (id, int), время связи (int).
A B C
1 5 10
1 6 20
1 7 20
1 8 11
Моя цель состоит в том, чтобы найти максимальное время связи и вернуть значение 1 6,20 (формат как AB, C) Поскольку у A1, B6 и A1, B7 оба имеют максимальное время связи 20, мне просто нужносохранить наименьшее число B id.
На шаге карты я уже выделил A как ключ, (B, C) как значение.
Пока что я могу вернуть выход с A и max 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
На карте я уже выделил A как ключ и B, Cкак ценность. Таким образом, составная строка содержит две переменные. Формат в значении - B, C.