一、需求:把最终结果存储在mysql中

1、UrlGroupCount1类

  1. import java.net.URL
  2. import java.sql.DriverManager
  3.  
  4. import org.apache.spark.rdd.RDD
  5. import org.apache.spark.{SparkConf, SparkContext}
  6.  
  7. /**
  8. * 把最终结果存储在mysql中
  9. */
  10. object UrlGroupCount1 {
  11. def main(args: Array[String]): Unit = {
  12. //1.创建spark程序入口
  13. val conf: SparkConf = new SparkConf().setAppName("UrlGroupCount1").setMaster("local[2]")
  14. val sc: SparkContext = new SparkContext(conf)
  15.  
  16. //2.加载数据
  17. val rdd1: RDD[String] = sc.textFile("e:/access.log")
  18.  
  19. //3.将数据切分
  20. val rdd2: RDD[(String, Int)] = rdd1.map(line => {
  21. val s: Array[String] = line.split("\t")
  22. //元组输出
  23. (s(1), 1)
  24. })
  25.  
  26. //4.累加求和
  27. val rdd3: RDD[(String, Int)] = rdd2.reduceByKey(_+_)
  28.  
  29. //5.取出分组的学院
  30. val rdd4: RDD[(String, Int)] = rdd3.map(x => {
  31. val url = x._1
  32. val host: String = new URL(url).getHost.split("[.]")(0)
  33. //元组输出
  34. (host, x._2)
  35. })
  36.  
  37. //6.根据学院分组
  38. val rdd5: RDD[(String, List[(String, Int)])] = rdd4.groupBy(_._1).mapValues(it => {
  39. //根据访问量排序 倒序
  40. it.toList.sortBy(_._2).reverse.take(1)
  41. })
  42.  
  43. //7.把计算结果保存到mysql中
  44. rdd5.foreach(x => {
  45. //把数据写到mysql
  46. val conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/urlcount?charactorEncoding=utf-8","root", "root")
  47. //把spark结果插入到mysql中
  48. val sql = "INSERT INTO url_data (xueyuan,number_one) VALUES (?,?)"
  49. //执行sql
  50. val statement = conn.prepareStatement(sql)
  51.  
  52. statement.setString(1, x._1)
  53. statement.setString(2, x._2.toString())
  54. statement.executeUpdate()
  55. statement.close()
  56. conn.close()
  57. })
  58.  
  59. //8.关闭资源
  60. sc.stop()
  61. }
  62. }

2、mysql创建数据库和表

  1. CREATE DATABASE urlcount;
  2. USE urlcount;
  3.  
  4. CREATE TABLE url_data(
  5. uid INT PRIMARY KEY AUTO_INCREMENT,
  6. xueyuan VARCHAR(50),
  7. number_one VARCHAR(200)
  8. )

3、结果

二、Spark提供的连接mysql的方式--jdbcRDD

1、JdbcRDDDemo类

  1. import java.sql.DriverManager
  2.  
  3. import org.apache.spark.rdd.JdbcRDD
  4. import org.apache.spark.{SparkConf, SparkContext}
  5.  
  6. /**
  7. * spark提供的连接mysql的方式
  8. * jdbcRDD
  9. */
  10. object JdbcRDDDemo {
  11. def main(args: Array[String]): Unit = {
  12. //1.创建spark程序入口
  13. val conf: SparkConf = new SparkConf().setAppName("JdbcRDDDemo").setMaster("local[2]")
  14. val sc: SparkContext = new SparkContext(conf)
  15.  
  16. //匿名函数
  17. val connection = () => {
  18. Class.forName("com.mysql.jdbc.Driver").newInstance()
  19. DriverManager.getConnection("jdbc:mysql://localhost:3306/urlcount?characterEncoding=utf-8","root", "root")
  20. }
  21.  
  22. //查询数据
  23. val jdbcRdd: JdbcRDD[(Int, String, String)] = new JdbcRDD(
  24. //指定sparkContext
  25. sc,
  26. connection,
  27. "SELECT * FROM url_data where uid >= ? AND uid <= ?",
  28. //2个任务并行
  29. 1, 4, 2,
  30. r => {
  31. val uid = r.getInt(1)
  32. val xueyuan = r.getString(2)
  33. val number_one = r.getString(3)
  34. (uid, xueyuan, number_one)
  35. }
  36. )
  37.  
  38. val result: Array[(Int, String, String)] = jdbcRdd.collect()
  39. println(result.toBuffer)
  40. sc.stop()
  41. }
  42. }

2、结果

Spark与mysql整合的更多相关文章

  1. 大数据工具篇之Hive与MySQL整合完整教程

    大数据工具篇之Hive与MySQL整合完整教程 一.引言 Hive元数据存储可以放到RDBMS数据库中,本文以Hive与MySQL数据库的整合为目标,详细说明Hive与MySQL的整合方法. 二.安装 ...

  2. 使用Apache Spark 对 mysql 调优 查询速度提升10倍以上

    在这篇文章中我们将讨论如何利用 Apache Spark 来提升 MySQL 的查询性能. 介绍 在我的前一篇文章Apache Spark with MySQL 中介绍了如何利用 Apache Spa ...

  3. Hive+Sqoop+Mysql整合

    Hive+Sqoop+Mysql整合 在本文中,LZ随意想到了一个场景: 车,道路,监控,摄像头 即当一辆车在道路上面行驶的时候,道路上面的监控点里面的摄像头就会对车进行数据采集. 我们对采集的数据进 ...

  4. 记录一次spark连接mysql遇到的问题

    版权声明:本文为博主原创文章,未经博主允许不得转载 在使用spark连接mysql的过程中报错了,错误如下 08:51:32.495 [main] ERROR - Error loading fact ...

  5. [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:

    [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子: mydf001=sqlContext.read.format("jdbc").o ...

  6. freeradius+xl2tp+mysql整合

    freeradius+xl2tp+mysql整合 搭了5个小时,可以说是入门到精通了.首先请确认你已经搭建好L2TP,并可以正常使用.  如何在Ubuntu下配置L2TP VPN L2TP使用radi ...

  7. spark SQL学习(spark连接 mysql)

    spark连接mysql(打jar包方式) package wujiadong_sparkSQL import java.util.Properties import org.apache.spark ...

  8. spark第十篇:Spark与Kafka整合

    spark与kafka整合需要引入spark-streaming-kafka.jar,该jar根据kafka版本有2个分支,分别是spark-streaming-kafka-0-8和spark-str ...

  9. spark练习--mysql的读取

    前面我们一直操作的是,通过一个文件来读取数据,这个里面不涉及数据相关的只是,今天我们来介绍一下spark操作中存放与读取 1.首先我们先介绍的是把数据存放进入mysql中,今天介绍的这个例子是我们前两 ...

随机推荐

  1. 04python while循环语句

    使用while ture语法 luck_num = 33 flag = True while flag: guess_num = input('请输入您猜测的年龄:') if guess_num &l ...

  2. FFMPEG AVRational

    FFMPEG的很多结构中有AVRational time_base;这样的一个成员,它是AVRational结构的 typedef struct AVRational{ int num; ///< ...

  3. Qt打包部署程序自动查找依赖DLL工具windeployqt

    qt编译好一个exe程序之后,部署到一台没有开发环境的机器上,需要一起拷贝其依赖的dll文件.这时需要一个windeployqt工具来帮忙,因为手动拷贝的话容易遗漏. https://blog.csd ...

  4. unity3d抛物线的脚本

    using UnityEngine; using System.Collections; public class ProjectileTest : MonoBehaviour { public Ga ...

  5. Android学习之PopupWindow

    Android的对话框有两种:PopupWindow和AlertDialog. 详细说明如下: AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情: AlertDi ...

  6. 解决neo4j @Transactional 与Spring data jpa @Transactional 冲突问题,@CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate,以及解决@Version失效问题

    之前mybatis特别流行,所以前几个项目都是用@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider 加反射泛型封装了一些通用 ...

  7. 【easyswoole】 解决安装报错

    在使用swoole 创建项目时候,报错 创建命令 composer create-project easyswoole/app easyswoole 错误信息: 解决办法,切换composer 源 镜 ...

  8. 二.jquery.datatables.js表格数据添加

    1.后台php public function addtable(){ $data = $_POST; if(M('yanfa_project')->add($data)){ $this-> ...

  9. echarts - 特殊需求实现代码汇总之【饼图】篇

    2018-07-24 15:36:43 起 - 饼图单项不同颜色的设置 效果图: 实现: 说明: 其实很简单,就是设置全局的color属性即可.color属性可以是一套数组,里边的样式以字符串格式设置 ...

  10. LeetCode 17 Letter Combinations of a Phone Number (电话号码字符组合)

    题目链接 https://leetcode.com/problems/letter-combinations-of-a-phone-number/?tab=Description HashMap< ...