将数据灌入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")

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