Pyspark-基于RDD中的键求和

时间:2018-09-07 08:57:03

标签: apache-spark pyspark rdd

我有一个csv文件,如下所示:

ID,NAME,SUBJECT,MARKS
1,ABC,ECONOMICS,50
1,ABC,SCIENCE,60
1,ABC,ENGLISH,70
2,XYZ,ECONOMICS,50
2,XYZ,ENGLISH,40
2,XYZ,SCIENCE,65

我能够将其加载到Spark中的RDD

empRDD =  sc.textFile("/user/location/EMPmarksfile");
header = empRDD.first();
newEmpRDD = empRDD.filter(lambda x:x!=header);
PairEmpRDD = newEmpRDD.map(lambda x:(x.split(",")[0],x));

我试图使用RDD转换reduceByKeygroupByKey将每个学生的总分加起来,并期望结果为:

[1,ABC,180]
[2,XYZ,155]

1 个答案:

答案 0 :(得分:1)

这是使用数据框api的方法

df =  spark.read.csv("/user/location/EMPmarksfile", header=True, inferSchema=True)
df.groupBy("ID","NAME").sum("MARKS").show(10,False)

我们也可以使用基于rdd的api

finalRdd = newEmpRDD.map(lambda x:(x.split(",")))\
    .map(lambda x: ((x[0],x[1]),int(x[3])))\
    .reduceByKey(lambda x,y:x+y)\
    .map(lambda x: (x[0][0],x[0][1],x[1]))