object JDBCDemo {
def main(args: Array[String]): Unit = {
//获取spark的连接
val session = SparkSession.builder()
.master("local")
.appName(JDBCDemo.getClass.getSimpleName)
.getOrCreate()
import session.implicits._
//获取mysql的连接
val url = "jdbc:mysql://localhost:3306/web01?characterEncoding=utf-8"
val tname = "v_ip"
val driver = "com.mysql.jdbc.Driver"
//(第一种)方式:从mysql中读取数据,read.format方法,最后必须用load来执行
val load = session.read.format("jdbc").options(
Map("url" -> url,
"dbtable" -> tname,
"user" -> "root",
"password" -> "root",
"driver" -> driver
)
).load()
//查看表结构
load.printSchema()
//输出表的数据类型
println(load.schema)
//查询表中cnts > 100 数据
val read: Dataset[Row] = load.where("cnts > 100")
//展示的内容用到show方法
// .show()
//数据入库,需要new一个Properties方法
val conn = new Properties()
//获取数据库的用户名,密码和运行的driver类
conn.setProperty("user", "root")
conn.setProperty("password", "root")
conn.setProperty("driver", driver)
//(第二种)方式读取数据库中数据
val read2 = session.read.format("jdbc").jdbc(url, tname, conn)
read2.show()
//(第三种)方式读取数据库中内容
val read3 = session.read.jdbc(url,tname,conn)
//写入数据库的(第一种)方法(此方法是默认模式(存在该表就直接报错))
//调用jdbc方法,方法里面的参数第一个是定义的url数据库连接,第二个是表名,第三个是Properties类的实例化对象(我们命名为conn)
read.write.jdbc(url, "emp", conn)
//写入数据库的(第二种)方法:调用mode方法并传入 SaveMode.Append 参数 (就是存在该表的情况下就直接在表后面追加)
read2.write.mode(SaveMode.Append).jdbc(url, "emp", conn)
//写入数据库(第三种)方式,调用mode方法并传入 SaveMode.Overwrite 参数 (吐过存在该表的情况下 覆盖里面的数据)
read3.write.mode(SaveMode.Overwrite).jdbc(url, "emp", conn)
session.close()
}
}
---------------------
作者:Morgan_Mu
来源:CSDN
原文:https://blog.csdn.net/mys_35088/article/details/81042729
版权声明:本文为博主原创文章,转载请附上博文链接!