题目:
- 编程实现利用DataFrame 读写MySQL 的数据
- 在 MySQL 数据库中新建数据库sparktest,再创建表 employee,添加两条记录, 如下图:
- 配置Spark, 通过JDBC连接数据库MySQL, 编程 实现 利用 DataFrame 插入 如下图所示的两行 数据 到 MySQL 中, 最后 打印出age的最大值和age 的总和。 表 6- 3 employee 表新增数据如下
代码:
仅供参考,运行成功;
window下请添加依赖,才可驱动;
import java.util.Properties
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
object homework1 {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder().master("local[2]")
.appName("Spark SQL basic example")
.getOrCreate()
spark.sqlContext.sparkContext.setLogLevel("WARN")
val connectionProperties = new Properties() ;
connectionProperties.put("user", "root")
connectionProperties.put("password", "root")
val jdbcDF: DataFrame = spark.read.jdbc("jdbc:mysql://spark:3306/sparktest", "employee", connectionProperties)
jdbcDF.show()
val employeeRDD: RDD[Array[String]] = spark.sparkContext.parallelize(Array("3 Mary F 26","4 Tom M 23")).map(_.split(" "))
val rowRDD: RDD[Row] = employeeRDD.map(r=>Row(r(0).toInt,r(1),r(2),r(3).toInt))
val schema = StructType(List(StructField("id", IntegerType, true),StructField("name", StringType, true),StructField("gender", StringType, true),StructField("age", IntegerType, true)))
val employeeDF = spark.createDataFrame(rowRDD,schema)
employeeDF.write.mode("append")
.jdbc("jdbc:mysql://spark:3306/sparktest", "employee",
connectionProperties)
spark.close()
}
}