scala - 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)))`
我该如何从这里开始?
解决方案
只需使用数据框语义。
首先将数据读取为数据框:
val spark = SparkSession.getOrCreate
val df = spark.read.csv(filename)
df.groupby("a").sum
编辑:对于 RDD 版本尝试:
processsed.reduceByKey(_ + _).
以上基本上假设处理的是对的RDD,并且您希望为每个键(第一个元素)求和第二个元素的值。
推荐阅读
- r - 使用 Apply 来避免“条件的长度 > 1 并且只使用第一个元素”?
- openshift - 在 Openshift 4 中部署 Angular 应用程序
- reactjs - 环境变量:Heroku -> Docker -> Nginx -> React
- algorithm - 呈现易于阅读的组合的算法
- flutter - 颤振错误被忽略
- laravel - Laravel 与两个表的父子关系
- postgresql-9.3 - 确定 PostgreSQL 中的共轭起始行
- c# - BinaryWriter 不写入文件
- java - 为什么 java clone() 留下同一个对象
- ios - 将 Capacitor 集成到 Ionic 项目后无法在 Xcode 中运行