【sparkStreaming】将DStream保存在MySQL
package SparkDemo
import java.sql.{Connection, DriverManager, PreparedStatement}
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
object DStreamToMySQL {
//定义更新函数
def updateFunc(newValues : Seq[Int],state :Option[Int]):Option[Int] = {
val currentCount = newValues.foldLeft(0)(_+_)
val previousCount = state.getOrElse(0)
Some(currentCount+previousCount)
}
def main(args : Array[String]): Unit ={
//建立SparkStream
val conf = new SparkConf().setAppName("DStreamToMySQL")
val ssc = new StreamingContext(conf,Seconds(1))
//设置日志等级
StreamingLoggingExample.setStreamingLogLevels()
val lines = ssc.textFileStream("/tmp/yuhang.zhang/data")
val words = lines.flatMap(_.split(" "))
val pairWord = words.map((_,1))
//累计更新
val stateWordCount = pairWord.updateStateByKey[Int](updateFunc)
//将stateWordCount存入数据库
//stateWordCount中包含一堆的Rdd
//我们需要对每个Rdd中的每条数据进行处理储存
stateWordCount.foreachRDD(rdd => {
//每个rdd中包含的数据类型为(String,Int)
//我们把所有数据records定义为Iterator类型,方便我们遍历
def func(records:Iterator[(String,Int)]): Unit ={
//注意,conn和stmt定义为var不能是val
var conn: Connection = null
var stmt : PreparedStatement = null
try{
//连接数据库
val url = "jdbc:mysql://localhost:3306/spark" //地址+数据库
val user = "root"
val password = ""
conn = DriverManager.getConnection(url,user,password)
//
records.foreach(p =>{
//wordcount为表名,word和count为要插入数据的属性
//插入数据
val sql = "insert into wordcount(word,count) values(?,?)"
stmt = conn.prepareStatement(sql)
stmt.setString(1,p._1.trim)
stmt.setInt(2,p._2.toInt)
stmt.executeUpdate()
})
}catch {
case e : Exception => e.printStackTrace()
}finally {
if(stmt != null)
stmt.close()
if(conn != null)
conn.close()
}
}
val repairtitionedRDD = rdd.repartition(3)//将每个rdd重新分区
repairtitionedRDD.foreachPartition(func)//对重新分区后的rdd执行func函数
})
ssc.start()//启动
ssc.awaitTermination()//等待终止命令
}
}
【sparkStreaming】将DStream保存在MySQL的更多相关文章
- 消费kafka的消息,并将其SparkStreaming结果保存到mysql
将数据保存到mysql,需要用到jdbc.为了提高保存速度,我写了一个连接池 1.保存到mysql的代码 package test05 import org.apache.log4j.{Level, ...
- 实时统计每天pv,uv的sparkStreaming结合redis结果存入mysql供前端展示
最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实际还需要按照类型字段分类统计pv,uv,比如按照date,hour,pv,uv,typ ...
- Asp.net Session 保存到MySql中
一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ...
- pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法
问题 将DataFrame数据保存到mysql中时,出现错误提示: BLOB/TEXT column used in key specification without a key length 原因 ...
- php将图片以二进制保存到mysql数据库并显示
一.存储图片的数据表结构: -- -- 表的结构 `image` -- CREATE TABLE IF NOT EXISTS `image` ( `id` int(3) NOT NULL AUTO_I ...
- Python scrapy爬虫数据保存到MySQL数据库
除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...
- 微信昵称有特殊符号怎么保存到mysql库里?
微信昵称有特殊符号怎么保存到mysql库里? mysql库怎么保存emoji表情? 这里提供 1 种稳妥有效的方法: // 入库之前,使用 Base64 编码 String nickname = re ...
- 爬取伯乐在线文章(四)将爬取结果保存到MySQL
Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...
- 将爬取的数据保存到mysql中
为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...
随机推荐
- 9.Query on Embedded/Nested Documents-官方文档摘录
1.插入案例 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...
- C/C++运算符及其优先级
1.自增自减 (1)前置运算:"先变后用" 如++i. 后置运算:"先用后变" 如i--. 比如: int i = 5. y1 = ++i: y2 = ...
- Android学习八---OpenCV JAVA API
OpenCV java API的文档说明在OpenCV-2.4.10-android-sdk/sdk/java/javadoc/index.html的文件夹下. 想用java API的方式进行Open ...
- pandas(九)数据转换
移除重复数据 dataframe中常常会出现重复行,DataFrame对象的duplicated方法返回一个布尔型的Series对象,可以表示各行是否是重复行.还有一个drop_duplicates方 ...
- ipv6被拒的解决方法
A,检测服务器是否支持ipv6连接 用mac 搭建IPv6环境测试,只能测试客户端到mac这段网络正常,但是mac到服务器还是IPv4的,所以没有办法测试服务器的IPv6是否正常.可以用手机打开2)步 ...
- 关于线程安全Dictionary
使用Dictionary时, 是线程不安全的(). 会出现以下的问题, 导致IIS挂掉: 其实DicMapper是不为NUL的, DicMapper["aaasdfasdfasdfzxc ...
- 从零到一创建ionic移动app:应用anjularjs编写ionic项目
推荐两篇文章,带你入门 ionic中文项目(作为了解ionic基础结构用):http://blog.csdn.net/i348018533/article/details/47258449/ ioni ...
- 如何防止通过URL地址栏直接访问页面
如何防止通过URL地址栏直接访问页面 一.解决方案 1,将所有页面放在WEB-INF目录下 WEB-INF是Java的web应用安全目录,只对服务端开放,对客户端是不可见的.所以我们可以把除首页(in ...
- 苹果Dock样式的菜单
在线演示 本地下载
- 20145120黄玄曦《网络对抗》Web安全基础实践
20145120黄玄曦<网络对抗>Web安全基础实践 回答问题 (1)SQL注入攻击原理,如何防御 SQL注入原理简单地说大概是,通过构造特殊的SQL命令提交表单,让服务器执行构造的恶意S ...