原先使用批次提交更新 但数据库无变化,不得不一条一条的插入 公司数据量不大  还未做数据量大的测试 但实时更新是可以的

关键sql :

  1. insert into area_user_amt (date,country,provence,amt) values('${datekey}','${countrykey}','${provencekey}','${amt}') ON DUPLICATE KEY UPDATE `amt`= '${amt}进行老的主键key的实时更新
  1. areaStartAmt.foreachRDD(rdd => {
  2. rdd.foreachPartition(partitionOfRecords => {
  3. if (partitionOfRecords.isEmpty) {
  4. println("This RDD is not null but partition is null")
  5. } else {
  6.  
  7. // Class.forName("com.mysql.jdbc.Driver")
  8. // var connection: Connection = null
  9. // try {
  10. // connection = DriverManager.getConnection(url, username, password)
  11. // connection.setAutoCommit(false)
  12. // val time = System.currentTimeMillis() / 1000
  13. // // val sql = "insert into test (bc_person,amt) values(?,?) ON DUPLICATE KEY UPDATE `amt`= ?"
  14. // val sql1 = "insert into area_user_amt (date,country,provence,amt) values(?,?,?,?) ON DUPLICATE KEY UPDATE `amt`= ?"
  15. // // val sql3 = "insert into area_user_amt (date,country,provence,amt) values(?,?,?,?) "
  16. // val pstmt = connection.prepareStatement(sql1)
  17. // var count = 0
  18. // partitionOfRecords.foreach(record => {
  19. // // pstmt.setString(1, record._1)
  20. // // pstmt.setInt(2, record._2.toInt)
  21. // // pstmt.setInt(3, record._2.toInt)
  22. // val info = record._1.split("_")
  23. // // if(info.length==3){
  24. // pstmt.setString(1, info(2))
  25. // pstmt.setString(2, info(0))
  26. // pstmt.setString(3, info(1))
  27. // pstmt.setInt(4, record._2.toInt)
  28. // pstmt.setInt(5, record._2.toInt)
  29. // pstmt.addBatch()
  30. // count += 1
  31. // if (count % 500 == 0) {
  32. // pstmt.executeBatch()
  33. // connection.commit()
  34. // }
  35. // })
  36. // pstmt.execute()
  37. // connection.commit()
  38. // } finally {
  39. // if (connection != null)
  40. // connection.close()
  41. // }
  42.  
  43. val connection = DriverManager.getConnection(url, username, password)
  44. partitionOfRecords.foreach(record => {
  45. var datekey = record._1.split("_")(2)
  46. var countrykey = record._1.split("_")(0)
  47. var provencekey = record._1.split("_")(1)
  48. var amt = record._2
  49. val sql1 = s"insert into area_user_amt (date,country,provence,amt) values('${datekey}','${countrykey}','${provencekey}','${amt}') ON DUPLICATE KEY UPDATE `amt`= '${amt}'"
  50. // val sql = s"select * from area_user_amt where date='${datekey}' and country='${countrykey}' and provence='${provencekey}'"
  51. val stmt = connection.createStatement()
  52. val code = stmt.executeUpdate(sql1)
  53. //返回值
  54. if (code < 0) {
  55. println("更新失败")
  56. }
  57. else {
  58. // println("更新成功")
  59. }

sparkStreaming插入mysql 必须考虑到实时更新老的key的更多相关文章

  1. (转载)mysql 存在该记录则更新,不存在则插入记录的sql

    (转载)http://www.codesky.net/article/201003/105754.html 代码如下: INSERT table (auto_id, auto_name) values ...

  2. mysql根据查询结果批量更新多条数据(插入或更新)

    mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...

  3. mysql插入记录INSERT与多表更新

    1.第一种:INSERT [INTO] tbl_name[ (col_name, ... ) ]  {VALUES | VALUE}({expr |default}, ... ), (...), .. ...

  4. MySQL 实现将一个库表里面的数据实时更新到另一个库表里面

    MySQL 实现将一个库表里面的数据实时更新到另一个库表里面 需求描述:MySQL 里面有很多的数据库,这些数据库里面都有同一种表结构的表 (tb_warn_log),这张表的数据是实时更新的,现在需 ...

  5. mysql通过event和存储过程实时更新简单Demo

    今天想稍微了解一下存储过程和EVENT事件,最好的方法还是直接做一个简单的demo吧 首先可以在mysql表中创建一个users表 除了设置一些username,password等必要字段以外还要设立 ...

  6. WebSocket 实时更新mysql数据到页面

    使用websocket的初衷是,要实时更新mysql中的报警信息到web页面显示 没怎么碰过web,代码写的是真烂,不过也算是功能实现了,放在这里也是鞭策自己,web也要多下些功夫 准备 引入依赖 & ...

  7. sphinx通过增量索引实现近实时更新

    一.sphinx增量索引实现近实时更新设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少. 例如.原来的数据 ...

  8. sphinx 增量索引 实现近实时更新

    一.sphinx增量索引的设置   数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万条 ...

  9. MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.

    mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...

随机推荐

  1. 如何为DigitalOcean上的服务器配置SSH密钥

    本指南适用于mac OS和Linux,windows用户请绕道. 通常,当你启动DigitalOcean droplets时,只要过程完成,你会收到一封电子邮件,让你知道droplets的IP地址和密 ...

  2. vue-3.0创建项目

    .npm install --global @vue/cli .npm install -g @vue/cli-init .vue init webpack my-project

  3. 递归与非递归打印乘法口诀表--Scala(指令式、函数式思维练习)

    object Test extends App { def printMultiTable() { var i = 1 while (i < 10) { var j = 1 while (j & ...

  4. python基本运算符、比较运算符、赋值运算符、逻辑运算符

    # 基本运算符号: " + - * / % ** //" # a=20# b=30## print(a+b) #相加 当是: "+" a+b输出的结果:50## ...

  5. keras学习简单线性回归【1】

    转自:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-1-regressor/ 总的代码的过程就是: 1.导入模块+创建 ...

  6. SpringMVC的Model ModeMap ModelAndView @ModelAttribute @SessionAttribute区分

    Spring MVC整理系列(05)————Spring MVC配置解析及整合SpriSpring MVC之@ModelAttribute.@SessionAttributes以及Model的使用介绍 ...

  7. Linux 网络编程之 Select

    /*server*/ #include <stdio.h> #include <string.h> #include <unistd.h> #include < ...

  8. [LeetCode] 124. Binary Tree Maximum Path Sum_ Hard tag: DFS recursive, Divide and conquer

    Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any ...

  9. docker每次都重新拉取远程镜像的问题

    将镜像上传到远程之后,dockerfile按理来说只需一次拉取远程镜像就好了,之后每次都是使用第一次拉取的远程镜像. 但是实际上出现的问题是:dockerfile每次都从远程拉取镜像,浪费了资源和时间 ...

  10. Cocos Creator 动作(动画)笔记

    动作cc.ActionInterval 和cc.ActionInstant; var action = cc.moveTo(2, 100, 100); // 创建一个移动动作node.runActio ...