spark sql jdbc数据源 多种输出方式

package com.ws.jdbc
import java.util.Properties
import org.apache.spark.sql.{DataFrame, SparkSession}
/**
  * spark sql jdbc数据源
  */
object JdbcDataSource {

  def main(args: Array[String]): Unit = {
    val sparkSession = SparkSession.builder().appName("JdbcDataSource").master("local[*]").getOrCreate()

    //连接数据库,读取表结构,load也是Transformation
    val db: DataFrame = sparkSession.read.format("jdbc").options(
      Map("url" -> "jdbc:mysql://hadoop-03:3306/ip?charatorEncoding=utf-8",
        "driver" -> "com.mysql.jdbc.Driver",
        "dbtable" -> "ipcount",
        "user" -> "root",
        "password" -> "root")).load()

    //sql方式
    //db.createTempView("t_ipcount")
    //val result = sparkSession.sql("select * from t_ipcount where id > 15")

    //dataFrame 方式
    val result = db.filter(r => {
      r.getAs[Int]("id") > 15
    })

    import sparkSession.implicits._
    //lambda表达式
    //val result = db.filter($"id" >= 15)

    //将结果写入mysql
    val p = new Properties()
    p.put("user", "root")
    p.put("password", "root")
    // ignore : 如果表存在,不做任何操作;表不存在,创建表并将数据写进去
    result.write.mode("append").jdbc("jdbc:mysql://hadoop-03:3306/ip?characterEncoding=utf-8", "ipcount2", p)

    //json输出目录
    result.write.json("E:\\bigData\\testdata\\ip3")

    //csv格式输出目录
    result.write.csv("E:\\bigData\\testdata\\ip2")

    //保存到文件只能保存一列,多个字段报错,且字段类型必须为string
    result.write.text("E:\\bigData\\testdata\\ip4")

    //也可以指定hdfs路径
    result.write.parquet("E:\\bigData\\testdata\\ip4")

    //result.show()
    sparkSession.stop()
  }
}

你可能感兴趣的:(spark)