У меня есть сопоставитель, который испускает пары ключ/значение (составные и комбинированные значения разделяются запятой).Как рассчитать среднее значение из нескольких значений в 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, но не уверен, как это сделать с моим примером. Пожалуйста посоветуй.
Вы можете поделиться своим кодом с тем, как вы решили это с помощью foldByKey? –