sparkStreaming插入mysql 必须考虑到实时更新老的key
原先使用批次提交更新 但数据库无变化,不得不一条一条的插入 公司数据量不大 还未做数据量大的测试 但实时更新是可以的
关键sql :
- insert into area_user_amt (date,country,provence,amt) values('${datekey}','${countrykey}','${provencekey}','${amt}') ON DUPLICATE KEY UPDATE `amt`= '${amt}进行老的主键key的实时更新
- areaStartAmt.foreachRDD(rdd => {
- rdd.foreachPartition(partitionOfRecords => {
- if (partitionOfRecords.isEmpty) {
- println("This RDD is not null but partition is null")
- } else {
- // Class.forName("com.mysql.jdbc.Driver")
- // var connection: Connection = null
- // try {
- // connection = DriverManager.getConnection(url, username, password)
- // connection.setAutoCommit(false)
- // val time = System.currentTimeMillis() / 1000
- // // val sql = "insert into test (bc_person,amt) values(?,?) ON DUPLICATE KEY UPDATE `amt`= ?"
- // val sql1 = "insert into area_user_amt (date,country,provence,amt) values(?,?,?,?) ON DUPLICATE KEY UPDATE `amt`= ?"
- // // val sql3 = "insert into area_user_amt (date,country,provence,amt) values(?,?,?,?) "
- // val pstmt = connection.prepareStatement(sql1)
- // var count = 0
- // partitionOfRecords.foreach(record => {
- // // pstmt.setString(1, record._1)
- // // pstmt.setInt(2, record._2.toInt)
- // // pstmt.setInt(3, record._2.toInt)
- // val info = record._1.split("_")
- // // if(info.length==3){
- // pstmt.setString(1, info(2))
- // pstmt.setString(2, info(0))
- // pstmt.setString(3, info(1))
- // pstmt.setInt(4, record._2.toInt)
- // pstmt.setInt(5, record._2.toInt)
- // pstmt.addBatch()
- // count += 1
- // if (count % 500 == 0) {
- // pstmt.executeBatch()
- // connection.commit()
- // }
- // })
- // pstmt.execute()
- // connection.commit()
- // } finally {
- // if (connection != null)
- // connection.close()
- // }
- val connection = DriverManager.getConnection(url, username, password)
- partitionOfRecords.foreach(record => {
- var datekey = record._1.split("_")(2)
- var countrykey = record._1.split("_")(0)
- var provencekey = record._1.split("_")(1)
- var amt = record._2
- val sql1 = s"insert into area_user_amt (date,country,provence,amt) values('${datekey}','${countrykey}','${provencekey}','${amt}') ON DUPLICATE KEY UPDATE `amt`= '${amt}'"
- // val sql = s"select * from area_user_amt where date='${datekey}' and country='${countrykey}' and provence='${provencekey}'"
- val stmt = connection.createStatement()
- val code = stmt.executeUpdate(sql1)
- //返回值
- if (code < 0) {
- println("更新失败")
- }
- else {
- // println("更新成功")
- }
sparkStreaming插入mysql 必须考虑到实时更新老的key的更多相关文章
- (转载)mysql 存在该记录则更新,不存在则插入记录的sql
(转载)http://www.codesky.net/article/201003/105754.html 代码如下: INSERT table (auto_id, auto_name) values ...
- mysql根据查询结果批量更新多条数据(插入或更新)
mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...
- mysql插入记录INSERT与多表更新
1.第一种:INSERT [INTO] tbl_name[ (col_name, ... ) ] {VALUES | VALUE}({expr |default}, ... ), (...), .. ...
- MySQL 实现将一个库表里面的数据实时更新到另一个库表里面
MySQL 实现将一个库表里面的数据实时更新到另一个库表里面 需求描述:MySQL 里面有很多的数据库,这些数据库里面都有同一种表结构的表 (tb_warn_log),这张表的数据是实时更新的,现在需 ...
- mysql通过event和存储过程实时更新简单Demo
今天想稍微了解一下存储过程和EVENT事件,最好的方法还是直接做一个简单的demo吧 首先可以在mysql表中创建一个users表 除了设置一些username,password等必要字段以外还要设立 ...
- WebSocket 实时更新mysql数据到页面
使用websocket的初衷是,要实时更新mysql中的报警信息到web页面显示 没怎么碰过web,代码写的是真烂,不过也算是功能实现了,放在这里也是鞭策自己,web也要多下些功夫 准备 引入依赖 & ...
- sphinx通过增量索引实现近实时更新
一.sphinx增量索引实现近实时更新设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少. 例如.原来的数据 ...
- sphinx 增量索引 实现近实时更新
一.sphinx增量索引的设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万条 ...
- MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.
mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...
随机推荐
- 如何为DigitalOcean上的服务器配置SSH密钥
本指南适用于mac OS和Linux,windows用户请绕道. 通常,当你启动DigitalOcean droplets时,只要过程完成,你会收到一封电子邮件,让你知道droplets的IP地址和密 ...
- vue-3.0创建项目
.npm install --global @vue/cli .npm install -g @vue/cli-init .vue init webpack my-project
- 递归与非递归打印乘法口诀表--Scala(指令式、函数式思维练习)
object Test extends App { def printMultiTable() { var i = 1 while (i < 10) { var j = 1 while (j & ...
- python基本运算符、比较运算符、赋值运算符、逻辑运算符
# 基本运算符号: " + - * / % ** //" # a=20# b=30## print(a+b) #相加 当是: "+" a+b输出的结果:50## ...
- keras学习简单线性回归【1】
转自:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-1-regressor/ 总的代码的过程就是: 1.导入模块+创建 ...
- SpringMVC的Model ModeMap ModelAndView @ModelAttribute @SessionAttribute区分
Spring MVC整理系列(05)————Spring MVC配置解析及整合SpriSpring MVC之@ModelAttribute.@SessionAttributes以及Model的使用介绍 ...
- Linux 网络编程之 Select
/*server*/ #include <stdio.h> #include <string.h> #include <unistd.h> #include < ...
- [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 ...
- docker每次都重新拉取远程镜像的问题
将镜像上传到远程之后,dockerfile按理来说只需一次拉取远程镜像就好了,之后每次都是使用第一次拉取的远程镜像. 但是实际上出现的问题是:dockerfile每次都从远程拉取镜像,浪费了资源和时间 ...
- Cocos Creator 动作(动画)笔记
动作cc.ActionInterval 和cc.ActionInstant; var action = cc.moveTo(2, 100, 100); // 创建一个移动动作node.runActio ...