一、需求:把最终结果存储在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. iOS开发-NSDictionary

    判断一个字典中是否存在某个key,有两种方法: 方法一: if ([dictionary allKeys] containsObject: key]){ // cotains key operatio ...

  2. FPGA连接

    别人推荐,暂时存这了: http://www.eepw.com.cn/news/fpga

  3. mybatis 之 parameterType="String" resultType="java.util.HashMap">

    public ServiceMessage<Map<String, String>> getGoodsStockNo( List<Map<String, Strin ...

  4. Fragment切换问题

    片断一: add hind @Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) { switch (check ...

  5. thinkphp 控制器unset删除对象变量失败。。

    今儿开发过程中发现 tp是unset 变量失败..具体代码 foreach( $this->menu as $k => $v){ if(0 == $v['flag']) unset($th ...

  6. PHP中$_SERVER的详细用法

    PHP中$_SERVER的详细用法 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. ...

  7. 微信小程序实例源码大全2

    wx-gesture-lock  微信小程序的手势密码 WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小说搜索 sh ...

  8. smali-2.2.4.jar & baksmali-2.2.4.jar

    https://bitbucket.org/JesusFreke/smali/downloads/

  9. CF 672D Robin Hood(二分答案)

    D. Robin Hood time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  10. [转]Windows上搭建Kafka运行环境

    [转]http://www.cnblogs.com/alvingofast/p/kafka_deployment_on_windows.html Windows上搭建Kafka运行环境   完整解决方 ...