RDD和Mysql互相操作

示例代码如下,记录下:

package cn.lijie.business

import java.sql.{Connection, DriverManager, PreparedStatement}

import org.apache.spark.rdd.JdbcRDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * User: lijie
  */
object JDBCTest {

  /**
    * 持久化方法
    *
    * @param it
    */
  def persistData(it: Iterator[(String, Int)]): Unit = {
    var conn: Connection = null
    var pre: PreparedStatement = null
    val sql: String = "insert into jdbc_spark (w,c) VALUES (?,?)"
    try {
      conn = DriverManager.getConnection("jdbc:mysql://192.168.80.123:3306/portrait?user=root&password=")
      it.foreach(x => {
        pre = conn.prepareStatement(sql)
        pre.setString(1, x._1)
        pre.setInt(2, x._2)
        pre.executeUpdate()
      })
    } catch {
      case e: Exception => println(e.getMessage)
    } finally {
      if (pre != null) {
        pre.close()
      }
      if (conn != null) {
        conn.close()
      }
    }
  }

  /**
    * 获取连接
    */
  def getConn: Connection = {
    Class.forName("com.mysql.jdbc.Driver")
    val conn = DriverManager.getConnection("jdbc:mysql://192.168.80.123:3306/portrait?user=root&password=")
    conn
  }

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("jdbc").setMaster("local[2]")
    val sc = new SparkContext(conf)
    //    sc.parallelize(List("lijie lijie hello", "aaa bbb aaa", "aaa bbb aaa ccc")).flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).sortBy(_._2).foreachPartition(persistData(_))
    val query = new JdbcRDD(sc, getConn _, "select * from jdbc_spark where id between ? and ? ", 1, 5, 2, rs => {
      (rs.getInt(1), rs.getString(2), rs.getInt(3))
    })
    println(query.count())
    for (i <- query.collect) {
      println("id:" + i._1 + "   w:" + i._2 + "   c:" + i._3)
    }
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值