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")
}