sparkStreamMySql

import java.sql.DriverManager

import com.typesafe.config.ConfigFactory
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}

object SparkStreamMySql {
  def main(args: Array[String]): Unit = {
    val config = ConfigFactory.load()
    val conf = new SparkConf().setMaster("local[2]").setAppName(this.getClass.getSimpleName)
    val ssc = new StreamingContext(conf,Seconds(3));
    val InputStream = ssc.socketTextStream("b02master",1315);
        InputStream.foreachRDD(rdd=>{
          val resultRdd = rdd.flatMap(_.split(" +")).map((_,1)).reduceByKey(_+_)
            //判断RDD是否为空
          if(resultRdd!=null){
            resultRdd.foreachPartition(iter=>{
              //每一个分区建立一次数据库连接
              //建立数据库连接
              val conn = DriverManager.getConnection(config.getString("db.url"),config.getString("db.user"),config.getString("db.password"))
              val table = config.getString("db.table")
              val createTable = conn.prepareStatement(s"create table if not exists  ${table} (word varchar(15),cnts int)")
              createTable.execute()
              iter.foreach(tp=>{
                //先查询表里是否有数据
                val selectStatus = conn.prepareStatement(s"select cnts from ${table} where word=?")
                selectStatus.setString(1,tp._1)
                val result = selectStatus.executeQuery()
                var needInsert=true
                while (result.next()){
                  needInsert=false;
                  val Oldvalue = result.getInt(1)
                  val newValue = Oldvalue+tp._2
                  val updateTable = conn.prepareStatement(s"update  ${table} set cnts = ? where word = ?")
                  updateTable.setInt(1,newValue)
                  updateTable.setString(2,tp._1)
                  updateTable.executeUpdate()
                  if (updateTable!=null){
                    updateTable.close()
                  }
                }
                if (needInsert){
                  val insertTable = conn.prepareStatement(s"insert into ${table} values(?,?)")
                  insertTable.setString(1,tp._1)
                  insertTable.setInt(2,tp._2)
                  insertTable.execute()
                  if (insertTable!=null){
                    insertTable.close()
                  }
                }
              })
              if (conn!=null){
                conn.close()
              }

            })

          }
        })
    ssc.start()
    ssc.awaitTermination()
  }

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值