使用Scala 读写MySQL 数据给Spark任务执行
来源:互联网 发布:最好背单词软件 编辑:程序博客网 时间:2024/06/05 06:02
初学Spark,需要从数据库读取数据给Spark执行,然后将执行结果返回给数据库。
由于Spark是基于 Scala 开发的,刚开始完全摸不到头脑,本来是用java将数据库数据写到一个文件,然后spark去读这个文件然后执行,又突然想到,既然scala写的spark程序,何不用scala来直接读取数据库给spark任务执行,然后返回给数据库就行了啊,还绕那么多弯干嘛。。
虽然不会写Scala,但是会写 Java啊,于是照葫芦画瓢,连接JDBC,将数据存到集合然后计算即可。
开始用的List, 但是Scala的List类型是不可变的,immutable,
A class for immutable linked lists representing ordered collections of elements of type.
于是看看有没有可变集合,找到一个scala.collection.mutable.ArrayBuffer,可用。
package wordcountimport org.apache.spark.{SparkConf, SparkContext}import java.sql.{Connection, DriverManager, ResultSet};import scala.collection.mutable.ArrayBuffer/** * Created by kay on 2017/12/13. */object WordCountLocal { // Change to Your Database Config val conn_str = "jdbc:mysql://localhost:3306/mydb?user=root&password=root"; def main(args: Array[String]): Unit = { // Load the driver classOf[com.mysql.jdbc.Driver] // Setup the connection val conn = DriverManager.getConnection(conn_str) val arrayBuffer = ArrayBuffer[String]() try { // Configure to be Read Only val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) // Execute Query val rs = statement.executeQuery("SELECT name FROM table1") // Iterate Over ResultSet while (rs.next) { arrayBuffer+=rs.getString("name") } } finally { conn.close } execute(arrayBuffer) } def execute(arrayBuffer:ArrayBuffer[String]): Unit ={ // Load the driver classOf[com.mysql.jdbc.Driver] val conf = new SparkConf().setAppName("testWord").setMaster("local[4]") val sc = new SparkContext(conf) val stringRDD=sc.parallelize(arrayBuffer) val conn1 = DriverManager.getConnection(conn_str) try { for ((key,count) <- stringRDD.map((_, 1)).reduceByKey(_ + _).collect()) { val prep = conn1.prepareStatement("INSERT INTO result (word, count) VALUES (?, ?) ") prep.setString(1, key) prep.setInt(2, count) prep.executeUpdate } }finally { conn1.close() } }}
阅读全文
0 0
- 使用Scala 读写MySQL 数据给Spark任务执行
- spark (scala)使用mybatis插入数据到mysql
- 如何使用scala+spark读写hbase?
- 使用Crontab定时执行Spark任务
- spark使用scala读取Avro数据
- Spark/scala 写数据到Mysql数据库方法一
- Spark/scala 写数据到Mysql数据库方法二
- scala/spark/python使用
- Spark SQL通过JDBC连接MySQL读写数据
- Spark任务执行流程解析
- 大数据 spark scala语言
- spark SQL 数据保存到MYSQL中的执行日志
- hadoop连接mysql数据库执行数据读写数据库操作
- hadoop连接mysql数据库执行数据读写数据库操作
- spark rdd scala相关使用
- 当对象包含嵌套对象时,使用Spark SQL执行sql查询抛出scala.MatchError异常
- MySQL定时执行任务
- Mysql定时任务执行
- project euler 19 Counting Sundays
- 以一种极其优雅的方式来调用Toast和Snackbar
- VS2015断点调试神坑之为引用变量赋值为null不成功?
- 九个绝招,让你戒掉旧情人
- 晓之以理,不如动之以情——新书《以大致胜》解读(下篇)
- 使用Scala 读写MySQL 数据给Spark任务执行
- bzoj 3725: PA2014 Final Matryca 乱搞
- 【第二期免费送书】中奖名单
- opencv在ios上的简单实现[objective-c&c++]
- 机器学习(32)之典型相关性分析(CCA)详解 【文末有福利......】
- JQuery 加法计算器
- LMAX架构
- Ping 命令详解
- AtCoder Beginner Contest 082