2025.1.26(寒假第十九天)
RDD 转换为 DataFrame
学习记录:
学习实验题目中的“编程实现将 RDD 转换为 DataFrame”部分。
将 employee.txt 文件中的数据加载为 RDD。
// 创建 SparkSession
val spark = SparkSession.builder()
.appName("RDD to DataFrame")
.master("local[*]")
.getOrCreate()
// 读取文本文件
val employeeRDD = spark.sparkContext.textFile("file:///path/to/employee.txt")
// 将 RDD 转换为 DataFrame
val employeeDF = employeeRDD.map(line => {
val fields = line.split(",")
(fields(0).toInt, fields(1), fields(2).toInt)
}).toDF("id", "name", "age")
// 按指定格式打印 DataFrame 数据
employeeDF.select(concat_ws(", ", $"id", $"name", $"age")).show()
// 停止 SparkSession
spark.stop()
DataFrame 读写 MySQL 数据
学习实验题目中的“编程实现利用 DataFrame 读写 MySQL 的数据”部分。
在 MySQL 中创建数据库 sparktest 和表 employee。
// 创建 SparkSession
val spark = SparkSession.builder()
.appName("DataFrame MySQL")
.master("local[*]")
.config("spark.driver.extraClassPath", "/path/to/mysql-connector-java-8.0.15.jar")
.getOrCreate()
// 创建 DataFrame
val employeeDF = Seq(
(3, "Mary", "F", 26),
(4, "Tom", "M", 23)
).toDF("id", "name", "gender", "age")
// 写入 MySQL
employeeDF.write
.format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/sparktest")
.option("dbtable", "employee")
.option("user", "root")
.option("password", "password")
.mode("append")
.save()
// 读取 MySQL 数据
val readDF = spark.read
.format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/sparktest")
.option("dbtable", "employee")
.option("user", "root")
.option("password", "password")
.load()
// 打印 age 的最大值和总和
readDF.select(max("age"), sum("age")).show()
// 停止 SparkSession
spark.stop()
实验总结:
掌握 Spark 通过 JDBC 连接 MySQL 的方法。
理解如何使用 DataFrame 操作数据库数据。