首页 > 解决方案 > SCALA:在一列上分组,在另一列上求和

问题描述

我是 Scala 的新手。输入文件中包含的数据是:

a,abcd,1
a,efaf,3
b,xafsdf,2
b,fafdr,3

我需要如下输出:

a,4
b,5
object WordCount {
  def main(args: Array[String]): Unit = {`
  val conf = new SparkConf().setAppName("WordCount").setMaster("local")`
  val sc = new SparkContext(conf)`
  val dataRDD = sc.textFile("D:\\scala_samples\\moin.csv")`
  // dataRDD.collect().foreach(println(_))`
  val splitted = dataRDD.map(line => line.split(","))`
  val processed = splitted.map(x=>(x(0),x(2)))`

我该如何从这里开始?

标签: scalaapache-spark

解决方案


只需使用数据框语义。

首先将数据读取为数据框:

val spark = SparkSession.getOrCreate
val df = spark.read.csv(filename)
df.groupby("a").sum

编辑:对于 RDD 版本尝试:

processsed.reduceByKey(_ + _).

以上基本上假设处理的是对的RDD,并且您希望为每个键(第一个元素)求和第二个元素的值。


推荐阅读