如何从csv文件中的spark中的id对值求和

问题描述 投票:-1回答:1
      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或其他名称。

感谢您的帮助。

scala apache-spark hadoop rdd
1个回答
0
投票
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)))
© www.soinside.com 2019 - 2024. All rights reserved.