很少说看代码(JDBC数据源):
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()
}
}