2018-05-25 gt-day 问题答案参考–Spark¶
[1]:
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
[2]:
spark = SparkSession.builder.getOrCreate()
[3]:
# 读取源数据
df = spark.read.csv('/Users/cjh/Downloads/demo_data.csv', header=True)
df.show(n=100)
+---------+----+-------+----+
| 学年|学号| 科目|分数|
+---------+----+-------+----+
|2011-2012| 1|Chinese| 97|
|2011-2012| 2|Chinese| 80|
|2011-2012| 3|Chinese| 85|
|2011-2012| 4|Chinese| 86|
|2011-2012| 5|Chinese| 91|
|2011-2012| 6|Chinese| 79|
|2011-2012| 7|Chinese| 91|
|2011-2012| 1|English| 70|
|2011-2012| 2|English| 80|
|2011-2012| 3|English| 94|
|2011-2012| 4|English| 72|
|2011-2012| 5|English| 94|
|2011-2012| 6|English| 96|
|2011-2012| 7|English| 77|
|2011-2012| 1| math| 72|
|2011-2012| 2| math| 90|
|2011-2012| 3| math| 89|
|2011-2012| 5| math| 72|
|2011-2012| 6| math| 91|
|2011-2012| 7| math| 66|
|2011-2012| 4| math| 60|
|2012-2013| 6|Chinese| 95|
|2012-2013| 1|Chinese| 85|
|2012-2013| 7|Chinese| 83|
|2012-2013| 3|Chinese| 78|
|2012-2013| 2|Chinese| 76|
|2012-2013| 5|Chinese| 76|
|2012-2013| 4|Chinese| 72|
|2012-2013| 5|English| 95|
|2012-2013| 2|English| 91|
|2012-2013| 6|English| 90|
|2012-2013| 4|English| 86|
|2012-2013| 3|English| 78|
|2012-2013| 1|English| 72|
|2012-2013| 7|English| 72|
|2012-2013| 5| math| 94|
|2012-2013| 7| math| 94|
|2012-2013| 3| math| 92|
|2012-2013| 4| math| 89|
|2012-2013| 1| math| 88|
|2012-2013| 2| math| 76|
|2012-2013| 6| math| 70|
+---------+----+-------+----+
[4]:
# spark Dataframe的排序默认为升序
# 学生每一门课程的历史最高分数(长格式)
df.groupBy('学号', '科目').agg(F.max('分数').alias('最高分')).sort('学号').show(n=100)
+----+-------+------+
|学号| 科目|最高分|
+----+-------+------+
| 1|English| 72|
| 1| math| 88|
| 1|Chinese| 97|
| 2|Chinese| 80|
| 2|English| 91|
| 2| math| 90|
| 3| math| 92|
| 3|Chinese| 85|
| 3|English| 94|
| 4|English| 86|
| 4| math| 89|
| 4|Chinese| 86|
| 5|Chinese| 91|
| 5| math| 94|
| 5|English| 95|
| 6|Chinese| 95|
| 6|English| 96|
| 6| math| 91|
| 7|Chinese| 91|
| 7|English| 77|
| 7| math| 94|
+----+-------+------+
[5]:
# 学生每一门课程的历史最高分数(宽格式)
df.groupBy('学号').pivot('科目', values=['Chinese', 'English', 'math']).agg(F.max('分数')).sort('学号').show()
+----+-------+-------+----+
|学号|Chinese|English|math|
+----+-------+-------+----+
| 1| 97| 72| 88|
| 2| 80| 91| 90|
| 3| 85| 94| 92|
| 4| 86| 86| 89|
| 5| 91| 95| 94|
| 6| 95| 96| 91|
| 7| 91| 77| 94|
+----+-------+-------+----+
[6]:
# 以学年, 学号, 科目排序
df.sort('学年', '学号', '科目').show(n=100)
+---------+----+-------+----+
| 学年|学号| 科目|分数|
+---------+----+-------+----+
|2011-2012| 1|Chinese| 97|
|2011-2012| 1|English| 70|
|2011-2012| 1| math| 72|
|2011-2012| 2|Chinese| 80|
|2011-2012| 2|English| 80|
|2011-2012| 2| math| 90|
|2011-2012| 3|Chinese| 85|
|2011-2012| 3|English| 94|
|2011-2012| 3| math| 89|
|2011-2012| 4|Chinese| 86|
|2011-2012| 4|English| 72|
|2011-2012| 4| math| 60|
|2011-2012| 5|Chinese| 91|
|2011-2012| 5|English| 94|
|2011-2012| 5| math| 72|
|2011-2012| 6|Chinese| 79|
|2011-2012| 6|English| 96|
|2011-2012| 6| math| 91|
|2011-2012| 7|Chinese| 91|
|2011-2012| 7|English| 77|
|2011-2012| 7| math| 66|
|2012-2013| 1|Chinese| 85|
|2012-2013| 1|English| 72|
|2012-2013| 1| math| 88|
|2012-2013| 2|Chinese| 76|
|2012-2013| 2|English| 91|
|2012-2013| 2| math| 76|
|2012-2013| 3|Chinese| 78|
|2012-2013| 3|English| 78|
|2012-2013| 3| math| 92|
|2012-2013| 4|Chinese| 72|
|2012-2013| 4|English| 86|
|2012-2013| 4| math| 89|
|2012-2013| 5|Chinese| 76|
|2012-2013| 5|English| 95|
|2012-2013| 5| math| 94|
|2012-2013| 6|Chinese| 95|
|2012-2013| 6|English| 90|
|2012-2013| 6| math| 70|
|2012-2013| 7|Chinese| 83|
|2012-2013| 7|English| 72|
|2012-2013| 7| math| 94|
+---------+----+-------+----+
[7]:
# 以学年, 科目, 学号排序
df.sort('学年', '科目', '学号').show(n=100)
+---------+----+-------+----+
| 学年|学号| 科目|分数|
+---------+----+-------+----+
|2011-2012| 1|Chinese| 97|
|2011-2012| 2|Chinese| 80|
|2011-2012| 3|Chinese| 85|
|2011-2012| 4|Chinese| 86|
|2011-2012| 5|Chinese| 91|
|2011-2012| 6|Chinese| 79|
|2011-2012| 7|Chinese| 91|
|2011-2012| 1|English| 70|
|2011-2012| 2|English| 80|
|2011-2012| 3|English| 94|
|2011-2012| 4|English| 72|
|2011-2012| 5|English| 94|
|2011-2012| 6|English| 96|
|2011-2012| 7|English| 77|
|2011-2012| 1| math| 72|
|2011-2012| 2| math| 90|
|2011-2012| 3| math| 89|
|2011-2012| 4| math| 60|
|2011-2012| 5| math| 72|
|2011-2012| 6| math| 91|
|2011-2012| 7| math| 66|
|2012-2013| 1|Chinese| 85|
|2012-2013| 2|Chinese| 76|
|2012-2013| 3|Chinese| 78|
|2012-2013| 4|Chinese| 72|
|2012-2013| 5|Chinese| 76|
|2012-2013| 6|Chinese| 95|
|2012-2013| 7|Chinese| 83|
|2012-2013| 1|English| 72|
|2012-2013| 2|English| 91|
|2012-2013| 3|English| 78|
|2012-2013| 4|English| 86|
|2012-2013| 5|English| 95|
|2012-2013| 6|English| 90|
|2012-2013| 7|English| 72|
|2012-2013| 1| math| 88|
|2012-2013| 2| math| 76|
|2012-2013| 3| math| 92|
|2012-2013| 4| math| 89|
|2012-2013| 5| math| 94|
|2012-2013| 6| math| 70|
|2012-2013| 7| math| 94|
+---------+----+-------+----+
[28]:
# 以学年, 科目, 分数
df.sort('学年', '科目', '分数').show(n=100)
+---------+----+-------+----+
| 学年|学号| 科目|分数|
+---------+----+-------+----+
|2011-2012| 6|Chinese| 79|
|2011-2012| 2|Chinese| 80|
|2011-2012| 3|Chinese| 85|
|2011-2012| 4|Chinese| 86|
|2011-2012| 5|Chinese| 91|
|2011-2012| 7|Chinese| 91|
|2011-2012| 1|Chinese| 97|
|2011-2012| 1|English| 70|
|2011-2012| 4|English| 72|
|2011-2012| 7|English| 77|
|2011-2012| 2|English| 80|
|2011-2012| 3|English| 94|
|2011-2012| 5|English| 94|
|2011-2012| 6|English| 96|
|2011-2012| 4| math| 60|
|2011-2012| 7| math| 66|
|2011-2012| 5| math| 72|
|2011-2012| 1| math| 72|
|2011-2012| 3| math| 89|
|2011-2012| 2| math| 90|
|2011-2012| 6| math| 91|
|2012-2013| 4|Chinese| 72|
|2012-2013| 2|Chinese| 76|
|2012-2013| 5|Chinese| 76|
|2012-2013| 3|Chinese| 78|
|2012-2013| 7|Chinese| 83|
|2012-2013| 1|Chinese| 85|
|2012-2013| 6|Chinese| 95|
|2012-2013| 1|English| 72|
|2012-2013| 7|English| 72|
|2012-2013| 3|English| 78|
|2012-2013| 4|English| 86|
|2012-2013| 6|English| 90|
|2012-2013| 2|English| 91|
|2012-2013| 5|English| 95|
|2012-2013| 6| math| 70|
|2012-2013| 2| math| 76|
|2012-2013| 1| math| 88|
|2012-2013| 4| math| 89|
|2012-2013| 3| math| 92|
|2012-2013| 5| math| 94|
|2012-2013| 7| math| 94|
+---------+----+-------+----+
[ ]: