Mysql学习(三)Spark(Scala)写入Mysql的两种方式


package total
import org.apache.spark.sql.{DataFrame, Row, SQLContext, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}
import java.util.Properties

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{LongType, StringType, StructField, StructType}

object CountProvince {
  def main(args: Array[String]): Unit = {

    /**
      * 第一种写入Mysql方式
      */


    /**
      * 第一步判断参数个数
       */
    if (args.length < 2){
      println(
        """
          |total.CountProvince
          | 输入的文件路径
          | 输出的文件路径
        """.stripMargin
      )
      System.exit(0)
    }
    /**
      * 接收参数
      */
    val Array(inputFile,outputFile) = args

    val conf = new SparkConf().setAppName(s"${this.getClass.getSimpleName}")
    //    val sc = new SparkContext(conf)
//    val input = ("F:\\Scala\\Spark\\第二十天-dmp项目\\资料\\out1")
    /**
      * 创建SparkSession
      */
    val session: SparkSession = SparkSession.builder().config(conf).getOrCreate()
    /**
      * 读取文件的数据
      */
    val df: DataFrame = session.sqlContext.read.parquet(inputFile)

    /**
      * 创建一个临时表
      */
    df.createOrReplaceTempView("countProvince")
    /**
      * 统计出来count
      */
    val  sql =
      """
          select
              count(*),provincename, cityname
          from
              countProvince
          group by
              provincename, cityname
          order by
              provincename"""
    val dff = session.sqlContext.sql(sql)
    val url = "jdbc:mysql://192.168.123.102:3306/test"
    val properties = new Properties()
    properties.put("user","root")
    properties.put("password","root")
    dff.write.jdbc(url,"count",properties)
    


    /**
      * 第二种写入Mysql方式
      */
//    val conf = new SparkConf().setMaster("local[2]").setAppName("CountProvince")
////    val sc = new SparkContext(conf)
//    val Spark: SparkSession = SparkSession.builder().config(conf).getOrCreate()
//    val sc = Spark.sparkContext
//    /**
//      * 读取文件
//      */
//    val inputPath =  sc.textFile("F:\\Scala\\Spark\\第二十天-dmp项目\\资料\\data.txt")
//    inputPath.foreach(println(_))
//    /**
//      * 计算count
//      */
//    val countRDD = inputPath
//      .map(line => {
//        val fields = line.split(",")
//        (fields(24) + ":" + fields(25), 1)
//      }).reduceByKey(_ + _)
//
//    /**
//      * 用Row来转换
//      */
//    val RowRdd: RDD[Row] = countRDD.map(tuple => {
//      val diming = tuple._1
//      val count = tuple._2
//      Row(diming, count)
//    })
//    /**
//      * 再用schema
//      */
//    val schema: StructType = StructType(
//      StructField("diming", StringType, true) ::
//        StructField("count", LongType, true) :: Nil
//    )
//    /**
//      * 把 Row和 schema 合并成为 DataFrame
//      */
//    val df: DataFrame = Spark.createDataFrame(RowRdd,schema)
//
//    /**
//      * 创建一个临时表
//      */
//    df.createOrReplaceTempView("countProvince")
//
//    /**
//      * 把结果持久化到数据库
//      */
//    val url = "jdbc:mysql://192.168.123.102:3306/test"
//    val properties = new Properties()
//    properties.put("user","root")
//    properties.put("password","root")
//    df.write.jdbc(url,"count2",properties)

  }
}

你可能感兴趣的:(mysql)