1127头歌作业
第一关第一题
任务描述
本关任务:根据编程要求,完成任务。
编程要求
打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。
读取 /data/bigfiles/employee.json
文件,并填充 Python 语句完成右侧代码文件中列出的所有操作。
文件内容如下:
{ "id":1 ,"name":" Ella","age":36 }
{ "id":2,"name":"Bob","age":29 }
{ "id":3 ,"name":"Jack","age":29 }
{ "id":4 ,"name":"Jim","age":28 }
{ "id":5 ,"name":"Damon" }
{ "id":5 ,"name":"Damon" }
测试说明
平台将对你编写的代码进行评测,如果与预期结果一致,则通关,否则测试失败。
import findspark
findspark.init()
from pyspark.sql import SparkSession
################ Begin ################
# 创建SparkSession对象
sc = SparkSession.builder.master("local[*]").appName('read').getOrCreate()
# 读取文件
df = sc.read.json("file:///data/bigfiles/employee.json")
# 查询DataFrame的所有数据
df.show()
# 查询所有数据,并去除重复的数据
df.distinct().show()
# 查询所有数据,打印时去除id字段
df.drop("id").show()
# 筛选age>20的记录
df.filter(df.age > 20).show()
# 将数据按name分组
df.groupBy("name").count().show()
# 将数据按name升序排列
df.sort(df.name.asc()).show()
# 取出前3行数据
df.take(3)
# 查询所有记录的name列,并为其取别名为username
df.select(df.name.alias("username")).show()
# 查询年龄age的平均值
df.agg({"age": "mean"}).show()
# 查询年龄age的最大值
df.agg({"age": "max"}).show()
# 关闭SparkSession对象
sc.stop()
################ End ################
第二题
任务描述
本关任务:根据编程要求,完成任务。
编程要求
打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。
读取 /data/bigfiles/employee.txt
文件,实现从 RDD
转换得到 DataFrame
,打印出所有数据。
文件内容如下:
1,Ella,362,Bob,293,Jack,29
输出结果如下:
+---+----+---+
| id|name|age|
+---+----+---+
| 1|Ella| 36|| 2| Bob| 29|| 3|Jack| 29
|+---+----+---+
测试说明
平台将对你编写的代码进行评测,如果与预期结果一致,则通关,否则测试失败。
import findspark
findspark.init()
from pyspark.sql import SparkSession
from pyspark.sql.types import Row
################ Begin ################
# 创建SparkSession对象
spark = SparkSession.builder.appName("example").getOrCreate()
# 创建SparkContext对象
sc = spark.sparkContext
# 读取文本文件
lines = sc.textFile("/data/bigfiles/employee.txt")
# 将 RDD 转换为 DataFrame
data = lines.map(lambda x: x.split(",")).map(lambda x: Row(id=int(x[0]), name=x[1], age=int(x[2])))
df = spark.createDataFrame(data)
# 创建临时视图
df.createOrReplaceTempView("employee")
# 执行SQL查询并打印结果
result = spark.sql("SELECT * FROM employee")
result.show()
# 关闭SparkSession对象
spark.stop()
################ End ################
第三题
任务描述
本关任务:根据编程要求,完成任务。
编程要求
打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。
读取 MySQL 数据库 sparktest
中的 employee
数据,该表共有四个字段,分别为:id
、name
、gender
、age
。
将下列数据插入到该表中:
id,name,gender,age3,Mary,F,264,Tom,M,23
然后计算并打印出 age
字段的最大值和 age
字段的总和。
MySQL 数据库连接信息
账号: root
密码:123123
地址:127.0.0.1
端口:3306
输出结果如下:
+--------+
|max(age)
|+--------+
| 26|
+--------++--------+
|sum(age)|
+--------+
| 96|
+--------+
测试说明
平台将对你编写的代码进行评测,如果与预期结果一致,则通关,否则测试失败。
import findspark
findspark.init()
from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, IntegerType, Row
################ Begin ################
# 创建SparkContext对象
sc = SparkContext(appName="jdbc test")
spark = SparkSession(sc)
# 读取 MySQL 数据
jdbcDF = spark.read.format("jdbc") \
.option("url", "jdbc:mysql://localhost:3306/sparktest") \
.option("driver", "com.mysql.jdbc.Driver") \
.option("dbtable", "employee") \
.option("user", "root") \
.option("password", "123123") \
.load()
# 插入数据
studentRDD = sc.parallelize(["3 Mary F 26", "4 Tom M 23"]).map(lambda line: line.split(" "))
schema = StructType([StructField("id", IntegerType(), True),
StructField("name", StringType(), True),
StructField("gender", StringType(), True),
StructField("age", IntegerType(), True)])
rowRDD = studentRDD.map(lambda p: Row(int(p[0]), p[1].strip(), p[2].strip(), int(p[3])))
employeeDF = spark.createDataFrame(rowRDD, schema)
prop = {
'user': 'root',
'password': '123123',
'driver': 'com.mysql.jdbc.Driver'
}
employeeDF.write.jdbc("jdbc:mysql://localhost:3306/sparktest", 'employee', 'append', prop)
# 计算 age 字段最大值和总和,输出结果
jdbcDF.collect()
jdbcDF.agg({"age": "max"}).show()
jdbcDF.agg({"age": "sum"}).show()
# 关闭SparkContext对象
sc.stop()
################ End ################
多去去实验室吧,就三四个人