Spark与mysql整合
一、需求:把最终结果存储在mysql中
1、UrlGroupCount1类
- import java.net.URL
- import java.sql.DriverManager
- import org.apache.spark.rdd.RDD
- import org.apache.spark.{SparkConf, SparkContext}
- /**
- * 把最终结果存储在mysql中
- */
- object UrlGroupCount1 {
- def main(args: Array[String]): Unit = {
- //1.创建spark程序入口
- val conf: SparkConf = new SparkConf().setAppName("UrlGroupCount1").setMaster("local[2]")
- val sc: SparkContext = new SparkContext(conf)
- //2.加载数据
- val rdd1: RDD[String] = sc.textFile("e:/access.log")
- //3.将数据切分
- val rdd2: RDD[(String, Int)] = rdd1.map(line => {
- val s: Array[String] = line.split("\t")
- //元组输出
- (s(1), 1)
- })
- //4.累加求和
- val rdd3: RDD[(String, Int)] = rdd2.reduceByKey(_+_)
- //5.取出分组的学院
- val rdd4: RDD[(String, Int)] = rdd3.map(x => {
- val url = x._1
- val host: String = new URL(url).getHost.split("[.]")(0)
- //元组输出
- (host, x._2)
- })
- //6.根据学院分组
- val rdd5: RDD[(String, List[(String, Int)])] = rdd4.groupBy(_._1).mapValues(it => {
- //根据访问量排序 倒序
- it.toList.sortBy(_._2).reverse.take(1)
- })
- //7.把计算结果保存到mysql中
- rdd5.foreach(x => {
- //把数据写到mysql
- val conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/urlcount?charactorEncoding=utf-8","root", "root")
- //把spark结果插入到mysql中
- val sql = "INSERT INTO url_data (xueyuan,number_one) VALUES (?,?)"
- //执行sql
- val statement = conn.prepareStatement(sql)
- statement.setString(1, x._1)
- statement.setString(2, x._2.toString())
- statement.executeUpdate()
- statement.close()
- conn.close()
- })
- //8.关闭资源
- sc.stop()
- }
- }
2、mysql创建数据库和表
- CREATE DATABASE urlcount;
- USE urlcount;
- CREATE TABLE url_data(
- uid INT PRIMARY KEY AUTO_INCREMENT,
- xueyuan VARCHAR(50),
- number_one VARCHAR(200)
- )
3、结果
二、Spark提供的连接mysql的方式--jdbcRDD
1、JdbcRDDDemo类
- import java.sql.DriverManager
- import org.apache.spark.rdd.JdbcRDD
- import org.apache.spark.{SparkConf, SparkContext}
- /**
- * spark提供的连接mysql的方式
- * jdbcRDD
- */
- object JdbcRDDDemo {
- def main(args: Array[String]): Unit = {
- //1.创建spark程序入口
- val conf: SparkConf = new SparkConf().setAppName("JdbcRDDDemo").setMaster("local[2]")
- val sc: SparkContext = new SparkContext(conf)
- //匿名函数
- val connection = () => {
- Class.forName("com.mysql.jdbc.Driver").newInstance()
- DriverManager.getConnection("jdbc:mysql://localhost:3306/urlcount?characterEncoding=utf-8","root", "root")
- }
- //查询数据
- val jdbcRdd: JdbcRDD[(Int, String, String)] = new JdbcRDD(
- //指定sparkContext
- sc,
- connection,
- "SELECT * FROM url_data where uid >= ? AND uid <= ?",
- //2个任务并行
- 1, 4, 2,
- r => {
- val uid = r.getInt(1)
- val xueyuan = r.getString(2)
- val number_one = r.getString(3)
- (uid, xueyuan, number_one)
- }
- )
- val result: Array[(Int, String, String)] = jdbcRdd.collect()
- println(result.toBuffer)
- sc.stop()
- }
- }
2、结果
Spark与mysql整合的更多相关文章
- 大数据工具篇之Hive与MySQL整合完整教程
大数据工具篇之Hive与MySQL整合完整教程 一.引言 Hive元数据存储可以放到RDBMS数据库中,本文以Hive与MySQL数据库的整合为目标,详细说明Hive与MySQL的整合方法. 二.安装 ...
- 使用Apache Spark 对 mysql 调优 查询速度提升10倍以上
在这篇文章中我们将讨论如何利用 Apache Spark 来提升 MySQL 的查询性能. 介绍 在我的前一篇文章Apache Spark with MySQL 中介绍了如何利用 Apache Spa ...
- Hive+Sqoop+Mysql整合
Hive+Sqoop+Mysql整合 在本文中,LZ随意想到了一个场景: 车,道路,监控,摄像头 即当一辆车在道路上面行驶的时候,道路上面的监控点里面的摄像头就会对车进行数据采集. 我们对采集的数据进 ...
- 记录一次spark连接mysql遇到的问题
版权声明:本文为博主原创文章,未经博主允许不得转载 在使用spark连接mysql的过程中报错了,错误如下 08:51:32.495 [main] ERROR - Error loading fact ...
- [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:
[Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子: mydf001=sqlContext.read.format("jdbc").o ...
- freeradius+xl2tp+mysql整合
freeradius+xl2tp+mysql整合 搭了5个小时,可以说是入门到精通了.首先请确认你已经搭建好L2TP,并可以正常使用. 如何在Ubuntu下配置L2TP VPN L2TP使用radi ...
- spark SQL学习(spark连接 mysql)
spark连接mysql(打jar包方式) package wujiadong_sparkSQL import java.util.Properties import org.apache.spark ...
- spark第十篇:Spark与Kafka整合
spark与kafka整合需要引入spark-streaming-kafka.jar,该jar根据kafka版本有2个分支,分别是spark-streaming-kafka-0-8和spark-str ...
- spark练习--mysql的读取
前面我们一直操作的是,通过一个文件来读取数据,这个里面不涉及数据相关的只是,今天我们来介绍一下spark操作中存放与读取 1.首先我们先介绍的是把数据存放进入mysql中,今天介绍的这个例子是我们前两 ...
随机推荐
- 04python while循环语句
使用while ture语法 luck_num = 33 flag = True while flag: guess_num = input('请输入您猜测的年龄:') if guess_num &l ...
- FFMPEG AVRational
FFMPEG的很多结构中有AVRational time_base;这样的一个成员,它是AVRational结构的 typedef struct AVRational{ int num; ///< ...
- Qt打包部署程序自动查找依赖DLL工具windeployqt
qt编译好一个exe程序之后,部署到一台没有开发环境的机器上,需要一起拷贝其依赖的dll文件.这时需要一个windeployqt工具来帮忙,因为手动拷贝的话容易遗漏. https://blog.csd ...
- unity3d抛物线的脚本
using UnityEngine; using System.Collections; public class ProjectileTest : MonoBehaviour { public Ga ...
- Android学习之PopupWindow
Android的对话框有两种:PopupWindow和AlertDialog. 详细说明如下: AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情: AlertDi ...
- 解决neo4j @Transactional 与Spring data jpa @Transactional 冲突问题,@CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate,以及解决@Version失效问题
之前mybatis特别流行,所以前几个项目都是用@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider 加反射泛型封装了一些通用 ...
- 【easyswoole】 解决安装报错
在使用swoole 创建项目时候,报错 创建命令 composer create-project easyswoole/app easyswoole 错误信息: 解决办法,切换composer 源 镜 ...
- 二.jquery.datatables.js表格数据添加
1.后台php public function addtable(){ $data = $_POST; if(M('yanfa_project')->add($data)){ $this-> ...
- echarts - 特殊需求实现代码汇总之【饼图】篇
2018-07-24 15:36:43 起 - 饼图单项不同颜色的设置 效果图: 实现: 说明: 其实很简单,就是设置全局的color属性即可.color属性可以是一套数组,里边的样式以字符串格式设置 ...
- LeetCode 17 Letter Combinations of a Phone Number (电话号码字符组合)
题目链接 https://leetcode.com/problems/letter-combinations-of-a-phone-number/?tab=Description HashMap< ...