def parse(a: String): Double = {
if (a != null && a.length > 0 && !a.equals("PostGA")) {
a.toDouble }
else {
0
}
}
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Sum Goals").setMaster("local[*]")
val sc = new SparkContext(conf)
val allGoales = sc.textFile("D:\\java\\projects\\scala\\untitled\\src\\main\\files\\Goalies.csv")
val goales = allGoals.toJavaRDD().mapToPair(line => {
val data = line.split(",", -1)
Tuple2[String,Double](data(0), parse(data(21)))
}).groupByKey()
这是我的代码,按照ID将所有目标分组,并且我需要对这些目标求和,我尝试了mapValues()
,
.mapValues(x=>x.asInstanceOf[Number].doubleValue()+x.asInstanceOf[Number].doubleValue())
但是它需要iterable[]
,并且没有sum
功能,也许我需要使用另一个RDD
或其他名称。
感谢您的帮助。
def sumA(a: Iterable[Double]): Double = {
a.sum
}
val goales :JavaPairRDD[String,Double] = allGoals.toJavaRDD().mapToPair(line => {
val data = line.split(",", -1)
Tuple2[String,Double](data(0), parse(data(21)))
}).groupByKey().mapToPair(x=>Tuple2(x._1,sumA(x._2.asScala)))