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