章节测验.

第1关:第一题

打开右侧代码文件窗口,在 BeginEnd 区域补充代码,完成任务。

读取 /data/bigfiles/employee.json 文件,并填充 Python 语句完成右侧代码文件中列出的所有操作。

文件内容如下:

 
  1. { "id":1 ,"name":" Ella","age":36 }
  2. { "id":2,"name":"Bob","age":29 }
  3. { "id":3 ,"name":"Jack","age":29 }
  4. { "id":4 ,"name":"Jim","age":28 }
  5. { "id":5 ,"name":"Damon" }
  6. { "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 > 30).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 ################

第2关:第二题

打开右侧代码文件窗口,在 BeginEnd 区域补充代码,完成任务。

读取 /data/bigfiles/employee.txt 文件,实现从 RDD 转换得到 DataFrame,打印出所有数据。

文件内容如下:

 
  1. 1,Ella,36
  2. 2,Bob,29
  3. 3,Jack,29

输出结果如下:

 
  1. +---+----+---+
  2. | id|name|age|
  3. +---+----+---+
  4. | 1|Ella| 36|
  5. | 2| Bob| 29|
  6. | 3|Jack| 29|
  7. +---+----+---+
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

# 读取文本文件,这里需要指定分隔符,文本文件内容以换行符分隔
rdd = sc.textFile('/data/bigfiles/employee.txt', 1)  # 假设文件较小,只使用了1个分区

# 将 RDD 转换为 DataFrame,这里需要根据实际文本内容定义schema
# 假设文本文件内容为 CSV 格式,没有标题行,字段以逗号分隔
data = [Row(id=int(row.split(',')[0]), name=row.split(',')[1], age=int(row.split(',')[2])) for row in rdd.collect()]
df = spark.createDataFrame(data)

# 创建临时视图
df.createOrReplaceTempView("employees")

# 执行SQL查询并打印结果,查询所有员工的姓名和年龄
spark.sql("SELECT id, name, age FROM employees").show()

# 关闭SparkSession对象
spark.stop()

################ End ################

第3关:第三题

打开右侧代码文件窗口,在 BeginEnd 区域补充代码,完成任务。

读取 MySQL 数据库 sparktest 中的 employee 数据,该表共有四个字段,分别为:idnamegenderage

将下列数据插入到该表中:

 
  1. id,name,gender,age
  2. 3,Mary,F,26
  3. 4,Tom,M,23

然后计算并打印出 age 字段的最大值和 age 字段的总和。

MySQL 数据库连接信息

账号: root 密码:123123 地址:127.0.0.1 端口:3306

输出结果如下:

 
  1. +--------+
  2. |max(age)|
  3. +--------+
  4. | 26|
  5. +--------+
  6. +--------+
  7. |sum(age)|
  8. +--------+
  9. | 96|
  10. +--------+

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 ################

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值