Bootstrap

将spark计算结果导出或读取

配置连接属性

    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
    }

;