首页 > 解决方案 > Spark shell 使用 combineByKey 和 Object?

问题描述

我创建了简单的数据集来查找average. 找到了使用tuplewithcombineByKey选项的方法。最终结果集是这样的(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)))

tuple使用和combineByKey选项查找 FWA、SMX 等的平均值可以正常工作。

我用对象尝试过同样的事情。创建fd具有两个字段的对象,namedelay

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选项?既然不是keyvalue对。

请建议我如何找到average?我在哪里可以找到一些用于学习的高级 Spark 编程?

标签: scalaapache-sparkhadoopaverage

解决方案


推荐阅读