2015-06-08 6 views
1

Я пытаюсь настроить mapValues ​​так что я могу сделать что-то я следующий РДД создали:Спарк .mapValues ​​установка с несколькими значениями

res10: Array[(Int, (Double, Double, Double))] = Array((1,(9.1383276E7,1.868480924818E12,4488.0)), (22,(107667.11999999922,2582934.208799982,4488.0)), (2,(2.15141303E8,1.0585204549689E13,4488.0)), (3,(4488.0,4488.0,4488.0)), (44,(0.0,0.0,4488.0)), (18,(1348501.0,4.06652001E8,4488.0)), (9,(4488.0,4488.0,4488.0))) 

Я пытаюсь выполнить следующий код, но что-то у меня в синтаксис:

val dataStatsVals = dataStatsRDD.mapValues(x => { 
    x._3, x._1, x._1/x._3, math.pow(((x._2/x._3 - x._1/x._3)), 2) 
}) 

Я обыскивал Интернет, пытаясь найти хороший .mapValues ​​пример, который делает что-то подобное, но не могу найти его.

Edit: Input является: Сумма, сумма квадратов, и граф

Выход: Count, Sum, Среднее отклонение

+0

вы можете explainwhat ваша функция делает? –

+0

Добавлены объяснения – theMadKing

ответ

4

Без образца ожидается выход, кажется, что вы хотите поставить все что в кортеже. Если да, то вы просто не хватает внешних скобок:

val dataStatsVals = dataStatsRDD.mapValues(x => { 
    (x._3, x._1, x._1/x._3, math.pow((x._2/x._3 - x._1/x._3), 2)) 
}) 

Это даст вам Tuple4. Результаты будут:

1 => 3rd element from original tuple 
2 => 1st element from original tuple 
3 => 1st from original/3rd from original 
4 => output of power function 
2

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

val dataStatsVals = dataStatsRDD.mapValues{ 
     case (d1: Double, d2: Double, d3: Double) => (d3, d1, d1/d3, math.pow(((d2/d3 - d1/d3)), 2)) 
    } 
Смежные вопросы