MapReduce - итерация по четным значениям итерируемого <Text> - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь решить проблему уменьшения карты. На данный момент я получил карту методов, которая организует мои занятия следующим образом:

    MapResult:    
    <key , "YES">
    <key , "NO">
    <key , "NO">
    <key , "YES">

Что мне нужно сделать, так это проверить, есть ли хотя бы одно значение "YES" в четных записях этого набора и хотя бы одно значение "YES" в нечетных записях этого набора. В двух словах мое условие истинно, если, например, MapResult [0] == "YES" && MapResult [3] == YES.

Вот код, который мне нужно выполнить для задачи сокращения:

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 {

      for (Text value : values) {
        // Iteration on this values
      }

      //context.write();
    }
  }

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете перебрать итерируемую и «перевернуть» проверку на четные и нечетные элементы:

логический результат = ложь; логическое evenFound = false; логическое oddFound = false; логическое checkEven = true;

for (Text value : values) {
   if (checkEven) {
       evenFound |= "YES".equals(value);
   } else {
       oddFound |= "YES".equals(value);
   }

   if (evenFound && oddFound) {
       result = true;
       break;
   }

   checkEven = !checkEven;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...