天天看點

SparkSeesion讀寫操作資料庫

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

版權聲明:本文為部落客原創文章,轉載請附上博文連結!

繼續閱讀