一、需求:把最终结果存储在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整合的更多相关文章

  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. 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析

      0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4  更新时间:2017-09-13 程序源码下载:http://www ...

  2. linux 下的爆破工具hydra

    http://www.cnblogs.com/mchina/archive/2013/01/01/2840815.html 安装手册 http://www.aldeid.com/wiki/Thc-hy ...

  3. Flask-Script应用实例

    #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 #命令行任务 #fr ...

  4. C语言实现字符串IP与整数型IP的相互转换

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h&g ...

  5. 深入浅出MFC——MFC多线程程序设计(七)

    1. 从操作系统层面看线程——三个观念:模块(MDB).进程(PDB).线程(TDB) 2. “执行事实”发生在线程身上,而不在进程身上.也就是说,CPU调度单位是线程而非进程.调度器据以排序的,是每 ...

  6. 关于CreateProcess函数一些经验

    TCHAR szCmdLine[]={TEXT("E:\\CPL-server\\其他工具\\restartSrv\\bin\\opensavepath.exe")}; TCHAR ...

  7. [转]window下使用SetUnhandledExceptionFilter捕获让程序的崩溃

    简单使用SetUnhandledExceptionFilter()函数让程序优雅崩溃 虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束.并且发送 ...

  8. codeforces水题100道 第十八题 Codeforces Round #289 (Div. 2, ACM ICPC Rules) A. Maximum in Table (brute force)

    题目链接:http://www.codeforces.com/problemset/problem/509/A题意:f[i][1]=f[1][i]=1,f[i][j]=f[i-1][j]+f[i][j ...

  9. codeforces水题100道 第十二题 Codeforces Beta Round #91 (Div. 2 Only) A. Lucky Division (brute force)

    题目链接:http://www.codeforces.com/problemset/problem/122/A题意:判断一个数是否能被一个lucky number整除,一个lucky number是一 ...

  10. struts1的配置文件详解

    要想使用Struts,至少要依靠两个配置文件:web.xml和struts-config.xml.其中web.xml用来安装Struts框架.而struts-config.xml用来配置在Struts ...