pyspark求学生平均成绩

一、环境:

操作系统:Ubuntu18.04
Python 3.6.9
Spark 2.4.6

二、问题及题解

在这里插入图片描述
解题思路:
1、过滤掉选修的成绩记录,然后通过map构造(姓名,成绩)的键值对,经过一系列处理后通过得到每个学生必修课的平均成绩(代码即可看出思路)
在这里插入图片描述
在这里插入图片描述

2.通过自定义函数处理每个(姓名,平均分)键值对返回(“分数段”,1)键值对然后通过reduceBykey聚合得到每个分数段的总人数

在这里插入图片描述
在这里插入图片描述

三、测试数据、测试过程、测试结果

数据:
在这里插入图片描述
过程及结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、源码:

from pyspark import SparkConf,SparkContext


def map_func(x):
    s = x.split(",")
    return (s[1], int(s[4])) 
 
def map_func1(x):
    if(x>=90 and x<=100):
        return ("90~100", 1) 
    if(x>=80 and x<=89):
        return ("80~89", 1) 
    if(x>=70 and x<=79):
        return ("70~79", 1) 
    if(x>=60 and x<=69):
        return ("60~69", 1) 
    if(x<60):
        return ("<60:", 1) 
        
conf = SparkConf().setMaster("local").setAppName("homework1")
sc = SparkContext(conf=conf)

textData = sc.textFile("/input_file1.txt")
lines = textData.filter(lambda line : "bixiu" in line).map(lambda x:map_func(x))

avgData = lines.mapValues(lambda x : (x,1)).reduceByKey(lambda x,y : (x[0]+y[0],x[1] + y[1])).mapValues(lambda x : int(x[0] / x[1]))

avgData.saveAsTextFile("/result1")

fData = avgData.map(lambda x:map_func1(x[1])).reduceByKey(lambda x,y : (x+y))

fData.saveAsTextFile("/result2")

参考资料:厦门大学数据库实验室spark(Python版)部分章节(暂时找不到具体链接了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值