一、環境:
作業系統: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版)部分章節(暫時找不到具體連結了)