SparkSeesion讀寫操作資料庫
(親測有效)
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?utm_source=copy
版權聲明:本文為部落客原創文章,轉載請附上博文連結!