配置连接属性
val url = "jdbc:mysql://192.168.226.131:3306/etclog"
val driver = "com.mysql.jdbc.Driver"
val user = "root"
val password = "lzy"
val tb_full_log = "tb_full_log"
//配置MySQL连接属性:
private val prop = new Properties()
prop.setProperty("user",user)
prop.setProperty("password",password)
prop.setProperty("driver",driver)
一.导出(主要是方法不同)
导入MySQL(.jdbc)
//当 op 为 0 时:
//使用 SaveMode.Append 模式,这会将 DataFrame 的数据追加到现有表中。
//当 op 为 1 时(默认情况):
//使用 SaveMode.Overwrite 模式,这会覆盖目标表中的现有数据。
def dataFrameToMyDSql(df: DataFrame,table:String,op:Int = 1)={
if( op == 0 ){
df.write.mode(SaveMode.Append).jdbc(url,table,prop)
}else if(op == 1){
df.write.mode(SaveMode.Overwrite).jdbc(url,table,prop)
}
}
导出为parquet(.parquet)
- 列式存储,适合分析查询
- 支持嵌套数据结构
- 高效的压缩和编码方案
- 可以只读取需要的列,提高查询效率
- 与Hadoop生态系统良好集成
def dataFrameTOParquet(df:DataFrame,outpath:String,op:Int=1): Unit ={
if(op==0){
df.write.mode(SaveMode.Append).parquet(outpath);
}else if (op==1){
df.write.mode(SaveMode.Overwrite).parquet(outpath)
}
}
导入到hive(.save)
def dataFrameHive(df:DataFrame,table:String,op:Int=1): Unit ={
if (op ==0){
df.write.mode(SaveMode.Append).save(table)
}else if(op==1){
df.write.mode(SaveMode.Overwrite).save(table)
}
}
二.读取
从msql 中读到SparkDataframe
def getDataFrameFromMySQl(spark:SparkSession,table:String) :DataFrame={
val frame: DataFrame = spark.read.jdbc(url,table,prop)
frame
}
从parquet中读到SparkDataframe
def getDataFrameFromParquet(spark:SparkSession,path:String):DataFrame = {
val frame:DataFrame = spark.read.parquet(path)
frame
}
从hive中读到SparkDataframe
def getDataFrameFromeHive(spark:SparkSession,table:String):DataFrame={
val frame:DataFrame = spark.sql("select * from " + table)
frame
}