將數據灌入mysql中

package tools

import java.util.Properties

import config.ConfigHelper
import org.apache.spark.sql.{SaveMode, SparkSession}

//將列車出廠時間數據灌入mysql
object TrainTime2Mysql {
  def main(args: Array[String]): Unit = {
    //session
    val session=SparkSession
      .builder()
      //設置是否是在本地運行
      //*代表幾個線程
      .master("local[*]")
      //設置進程的名稱
      .appName(this.getClass.getName)
      //序列化
      .config("spark.serializer",ConfigHelper.serializer)
      .getOrCreate()
    //導入隱式轉換
    import session.implicits._
    //讀取數據
    //返回值是rdd
    val source = session.sparkContext.textFile(args(0))
    //處理數據
    //讀取外部配置文件
    val props=new Properties()
    props.setProperty("driver",ConfigHelper.driver)
    props.setProperty("user",ConfigHelper.user)
    props.setProperty("password",ConfigHelper.password)
    //數據清洗
    source.map(_.split("\\|",-1)).filter(_.length>=2)
      //scalajdbc
      .map(arr=>(arr(0),arr(1)))
      //使用toDF()方法將RDD轉換爲DataFrame
      //DataFrame 表示矩陣數據表,有行索引和列索引
      //兩列的列名分別爲trainId和trainTime
      .toDF("trainId","trainTime")
      //DataFrame寫入的模式一共有4種
      //SaveMode.Overwrite:覆蓋已經存在的文件
      //SaveMode.Append:向存在的文件追加
      //SaveMode.Ignore:如果文件已存在,則忽略保存操作
      //SaveMode.ErrorIfExists:如果文件已存在,則報錯
      .write.mode(SaveMode.Overwrite)
      //保存在TrainTime2Mysql這個表中
      .jdbc(ConfigHelper.url,"TrainTime2Mysql",props)
    //釋放資源
    session.stop()
  }

}

相關配置文件
application.conf

#配置文件
#配置壓縮格式
parquet.code="snappy"
#配置序列化方式
spark.serializer="org.apache.spark.serializer.KryoSerializer"
#配置jdbc鏈接
jdbc.url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"
jdbc.driver="com.mysql.jdbc.Driver"
jdbc.user="root"
jdbc.password="000000"
#配置scalikejdbc鏈接
db.default.url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"
db.default.driver="com.mysql.jdbc.Driver"
db.default.user="root"
db.default.password="000000"

ConfigHelper.scala

package config

import com.typesafe.config.{Config, ConfigFactory}

object ConfigHelper {
  //加載配置文件
  private lazy val load: Config = ConfigFactory.load()
  //加載壓縮格式
  val parquetCode: String = load.getString("parquet.code")
  //加載序列化方式
  val serializer: String = load.getString("spark.serializer")
  //加載jdbc
  val url: String = load.getString("jdbc.url")
  val driver: String = load.getString("jdbc.driver")
  val user: String = load.getString("jdbc.user")
  val password: String = load.getString("jdbc.password")
  //加載scalikejdbc
  val url2: String = load.getString("db.default.url")
  val driver2: String = load.getString("db.default.driver")
  val user2: String = load.getString("db.default.user")
  val password2: String = load.getString("db.default.password")

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章