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的更多相关文章

  1. 消费kafka的消息,并将其SparkStreaming结果保存到mysql

    将数据保存到mysql,需要用到jdbc.为了提高保存速度,我写了一个连接池 1.保存到mysql的代码 package test05 import org.apache.log4j.{Level, ...

  2. 实时统计每天pv,uv的sparkStreaming结合redis结果存入mysql供前端展示

    最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实际还需要按照类型字段分类统计pv,uv,比如按照date,hour,pv,uv,typ ...

  3. Asp.net Session 保存到MySql中

    一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ...

  4. 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 原因 ...

  5. php将图片以二进制保存到mysql数据库并显示

    一.存储图片的数据表结构: -- -- 表的结构 `image` -- CREATE TABLE IF NOT EXISTS `image` ( `id` int(3) NOT NULL AUTO_I ...

  6. Python scrapy爬虫数据保存到MySQL数据库

    除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...

  7. 微信昵称有特殊符号怎么保存到mysql库里?

    微信昵称有特殊符号怎么保存到mysql库里? mysql库怎么保存emoji表情? 这里提供 1 种稳妥有效的方法: // 入库之前,使用 Base64 编码 String nickname = re ...

  8. 爬取伯乐在线文章(四)将爬取结果保存到MySQL

    Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...

  9. 将爬取的数据保存到mysql中

    为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...

随机推荐

  1. python多线程的两种写法

    1.一般多线程 import threading def func(arg): # 获取当前执行该函数的线程的对象 t = threading.current_thread() # 根据当前线程对象获 ...

  2. 怎样优雅的管理ActionBar

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/50997095 本文出自:[顾林海的博客] 前言 随着项目越来越大.页面 ...

  3. dplyr快速入门

    RStudio Blog 介绍dplyr 包已发布 (Introducing dplyr), 此包将原本 plyr 包中的 ddply() 等函数进一步分离强化, 专注接受dataframe对象, 大 ...

  4. APP中关于Android和IOS与网页交互

    安卓交互: //安卓js代码start function bntcat(){ if(isAndroid){ musicPause() } var str = '{"tips":20 ...

  5. 使用npm构建前端项目基本流程

    现在各种前端框架, 库文件基本都托管到npm上, 我们平常下载到别人的项目文件, 也基本是用npm 构建的, 不了解点node和npm那是寸步难行. 下面介绍的代码示例不敢说是最佳实践, 但都是我亲自 ...

  6. Library Cache优化与SQL游标

    Library Cache主要用于存放SQL游标,而SQL游标最大化共享是Library Cache优化的重要途径,可以使SQL运行开销最低.性能最优. 1 SQL语句与父游标及子游标 在PL/SQL ...

  7. python16_day01【介绍、基本语法、流程控制】

    一.day01 1.二进制运算 60 & 13 =12 60 | 13 =61 60 ^ 13 =49 60<<2 =240 60>>2 =15 2.逻辑运算符 and ...

  8. go——工程结构

    Go是一门推崇软件工程理念的编程语言,它为开发周期的每个环节都提供了完备的工具和支持. Go语言高度强调代码和项目的规范和统一,这几种体现在工程结构或者说代码体制的细节之处. 1.工作区 一般情况下, ...

  9. Python(名称空间、函数嵌套、函数对象)

    一.名称空间: 名称空间 定义:存放名字和值的绑定关系       内置名称空间 python自带的名字,如print.int.str 解释器启动就会生效   全局名称空间 文件级别定义的名字,都会放 ...

  10. DP专题·二

    1.hdu 1260 Tickets 题意:有k个人,售票员可以选择一个人卖,或者同时卖给相邻的两个人.问最少的售票时间. 思路:dp[i] = min(dp[i - 1] + singlep[i], ...