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()
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值