Я создал простой набор данных, найдя average
.Нашел способ используя tuple
с опцией combineByKey
.Окончательный набор результатов, подобный этому (key,(total,no.of values))
scala> mydata.combineByKey( value => (value,1) , (acc:(Int,Int),value) => (acc._1+value,acc._2+1),(acc1:(Int,Int),acc2:(Int,Int))=>(acc1._1 + acc2._1 , acc2._2 + acc2._2))
res75: org.apache.spark.rdd.RDD[(String, (Int, Int))] = ShuffledRDD[42] at combineByKey at <console>:36
scala> res75.take(10)
res77: Array[(String, (Int, Int))] = Array((FWA,(309,1)), (SMX,(62,1)), (BMI,(91,2)), (HLN,(119,1)), (SUN,(118,1)), (HYS,(52,1)), (RIC,(1156,8)), (PSE,(72,1)), (SLC,(8699,8)), (EWN,(55,1)))
Поиск среднего значения для FWA, SMX и т. Д., Работает нормально с опциями tuple
и combineByKey
.
То же самое, что я пробовал с объектом.Созданный объект fd
с двумя полями, name
и delay
.
scala> case class **fd**(name:String,delay:Int)
defined class fd
scala> **data**.take(2)
res73: Array[fd] = Array(**fd**(DFW,11956), fd(DTW,588))
В вышеупомянутом RDD
, как я могу использовать опцию combineByKey
?Так как это не key
, а value
пара.
Подскажите пожалуйста, как найти average
?Где я могу найти продвинутое программирование искры для моего исследования?