2015-09-16 6 views
0

У меня есть сопоставитель, который испускает пары ключ/значение (составные и комбинированные значения разделяются запятой).Как рассчитать среднее значение из нескольких значений в Spark

например

ключ: а, б, в, г Значение: 1,2,3,4,5

ключ: а1, b1, c1, d1, Значение : 5,4,3,2,1

...

...

ключ: а, б, в, г Значение: 5,4,3,2,1

Я мог бы легко просуммировать эти значения, используя reduceByKey.

например

reduceByKey(new Function2<String, String, String>() { 

     @Override 
     public String call(String value1, String value2) { 
      String oldValue[] = value1.toString().split(","); 
      String newValue[] = value2.toString().split(","); 

      int iFirst = Integer.parseInt(oldValue[0]) + Integer.parseInt(newValue[0]); 
      int iSecond = Integer.parseInt(oldValue[1]) + Integer.parseInt(newValue[1]); 
      int iThird = Integer.parseInt(oldValue[2]) + Integer.parseInt(newValue[2]); 
      int iFourth = Integer.parseInt(oldValue[3]) + Integer.parseInt(newValue[3]); 
      int iFifth = Integer.parseInt(oldValue[4]) + Integer.parseInt(newValue[4]); 

      return iFirst + "," + iSecond + "," 
        + iThird+ "," + iFourth+ "," + iFifth; 

     } 
    }); 

Но проблема в том, как я считаю, в среднем только одно из этих значений. Предположим, я хочу использовать SUM iFirst, iSecond, iThird и iFourth, но хочу найти Среднее значение iFifth. Как мне это сделать? С помощью простых пар ключ/значение я мог бы использовать функцию mapValues, но не уверен, как это сделать с моим примером. Пожалуйста посоветуй.

ответ

0

Я использовал функцию foldByKey для решения этой проблемы.

+0

Вы можете поделиться своим кодом с тем, как вы решили это с помощью foldByKey? –

Смежные вопросы