reduceByKey和join的使用
刚刚接触了spark,发现还不错,今天就写了一篇关于spark的基础篇,
将几个学生的成绩求和,平均值,放入一个文件中,下面就是三个文件
1、第一步还是导入文件,
rdd1 = sc.textFile('F:/study/大三下/Spark/数据集/student.txt').map(lambda x:x.split('\t'))
rdd2 = sc.textFile('F:/study/大三下/Spark/数据集/result_bigdata.txt').map(lambda x:x.split('\t'))
rdd3 = sc.textFile('F:/study/大三下/Spark/数据集/result_math.txt').map(lambda x:x.split('\t'))
2、转成元组
rdd1_x = rdd1.map(lambda x:(x[0],x[1])) #转换为元组
rdd2_x= rdd2.map(lambda x:(x[0],int(x[2]))) #转换为元组
rdd3_x= rdd3.map(lambda x:(x[0],int(x[2]))) #转换为元组
3、使用union将两个成绩合并,并计算出总成绩和平均成绩
x = rdd2_x.union(rdd3_x)
x = x.reduceByKey(lambda x,y:(x,y,x+y,(x+y)/2))
x.collect()
4、使用join拼接student
y = rdd1_x.join(x)
y.collect()
至此,就等到了学生的成绩
但是不够完善
s = y.map(lambda x:(x[0],x[1][0],x[1][1][0],x[1][1][1],x[1][1][2],x[1][1][3]))
s.collect()
5、最后就可以保存了
s.repartition(1).saveAsTextFile('F:/study/大三下/Spark/数据集/s')