将单词计数的结果持久化到MySQL中
来源:互联网 发布:云计算 大会 编辑:程序博客网 时间:2024/05/15 08:22
1.MySQL的连接池
package streaming.utilsimport java.sql.{Connection, DriverManager}object MysqlPool { private val max=8 ;//连接池的连接总数 private val connectionNum=10;//每次产生的连接数 private var conNum=0;//当前连接池已经产生的连接数 import java.util private val pool=new util.LinkedList[Connection]();//连接池 { Class.forName("com.mysql.jdbc.Driver") } /** * 释放连接 */ def releaseConn(conn:Connection):Unit={ pool.push(conn); } /** * 获取连接 */ def getJdbcCoon():Connection={ //同步代码块 AnyRef.synchronized({ if(pool.isEmpty()){ for( i <- 1 to connectionNum){ val conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/htt","root","root"); pool.push(conn); conNum+1; } } pool.poll(); }) }}
2.持久化到数据库
import org.apache.log4j.{Level, Logger}import org.apache.spark.SparkConfimport org.apache.spark.streaming.dstream.ReceiverInputDStreamimport org.apache.spark.streaming.{Seconds, StreamingContext}import streaming.lesson01.utils.MysqlPool/** * Created by Administrator on 2017/8/9. */object WordCountByUpdateBykeyAndForeachRDD { def main(args: Array[String]): Unit = { /** * 这个地方设置的线程数至少是2,因为一个线程用来接收数据 * 另外一个线程是用来处理数据的。 * 如果你只写了一个线程,也不报错,只不过光是接收数据,不处理数据。 */ val conf = new SparkConf().setMaster("local[2]").setAppName("test") val ssc = new StreamingContext(conf,Seconds(1)) //设置日志级别 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) ssc.checkpoint("hdfs://hadoop1:9000/streaming") //通过监听一个端口得到一个DStream流 数据的输入 val DStream: ReceiverInputDStream[String] = ssc.socketTextStream("hadoop1",9999) val wordOneDstream = DStream.flatMap(_.split(",")) .map((_, 1)) /** * updateFunc: (Seq[V], Option[S]) => Option[S] * scala功底: k,v k:String 每一个单词 v:int 出现的次数 * 看样子是需要我们传进入两个参数,还要有返回值 * 参数一:Seq[V] hadoop,1 hadoop,1 haodop,1 * 对应这个key在这个批次里面出现的次数 * 1,1,1 * 参数二:Option[S] * 代表的是这个key,上一次的中间状态 4 * * 返回值:Option[S] * 把这个key最后的结果返回去 * * Option: * Some * None */ val wordCountDStream = wordOneDstream.updateStateByKey((values: Seq[Int], state: Option[Int]) => { val currentCount = values.sum val lastCount = state.getOrElse(0) Some(currentCount + lastCount) }) // wordCountDStream.print() wordCountDStream.foreachRDD( rdd =>{ rdd.foreachPartition( partitionRecord =>{ val coon = MysqlPool.getJdbcCoon() val statement = coon.createStatement() partitionRecord.foreach( record =>{ val sql=s"insert into wordcount values(now(),'${record._1}',${record._2})" statement.execute(sql) } ) MysqlPool.releaseConn(coon) }) }) ssc.start() ssc.awaitTermination() ssc.stop() }}
阅读全文
0 0
- 将单词计数的结果持久化到MySQL中
- 将mysql的查询结果保存到文件中
- 如何将mysql命令行的结果输出到文件中
- JMS消息持久化,将ActiveMQ消息持久化到mySql数据库中
- Jena——将本体持久化到MySQL数据库中
- 将MySQL中sql运行结果保存到文件
- MySQL将查询结果插入到数据表中
- 将MySQL中sql运行结果保存到文件
- spark将计算结果写入到mysql中
- Spark将计算结果写入到Mysql中
- Spark将计算结果写入到Mysql中
- MySQL将查询结果插入到数据表中
- MySQL将查询结果插入到数据表中
- MySQL将查询结果插入到数据表中
- MySQL将查询结果插入到数据表中
- 运用jena将本体持久化到Mysql
- 配置Tomcat将Session持久化到MySQL
- mapreduce的结果写入到mysql中
- 数据结构实验之图论九:最小生成树
- svn分支与合并
- Android 调用系统联系人列表页并返回姓名和手机号码
- 8.轨迹预测,乱七八糟的预测方法
- HMM训练
- 将单词计数的结果持久化到MySQL中
- CentOS下PHP7安装Phalcon3.x
- Android系统中Parcelable和Serializable的区别
- 特征工程学习资料
- 使用NPOI将Excel文件的数据导入数据库
- R语言︱线性混合模型理论与案例探究(固定效应&随机效应)
- Vuejs2.0 cnpm 安装脚手架项目模板
- 使用本地hadoop运行伪分布式程序
- 51NOD