关注公众号:分享电脑学习
回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新)
云盘目录说明:
tools目录是安装包
res 目录是每一个课件对应的代码和资源等
doc 目录是一些第三方的文档工具

承接上一篇文档《Spark案例练习-PV的统计》

参数说明:

继续上面的PV代码编写即可

思路:UV的计算

1.数据进行过滤清洗,获取两个字段(时间、guid)

2.guid非空,时间非空,时间字符串的长度必须大于10

3.将同一天的数据放在一起,根据guid去重,统计去重的结果

代码:

val rdd2 = rdd.map(line => line.split("\t"))
.filter(arr => {
//保留正常数据
arr.length >=3 && arr(2).trim.nonEmpty && arr(0).trim.length > 10
})
.map(arr => {
val date = arr(0).trim.substring(0,10)
val guid = arr(2).trim
(date,guid) // (date,url)
})

继续编写代码

有两种方式:

1. 基于groupByKey进行UV的统计

2. 基于reduceByKey实现UV的统计

先看基于groupByKey进行UV的统计

val uvRdd = rdd2.groupByKey()
.map(t => {
val date = t._1
val guids = t._2
val uv = guids.toSet.size
(date,uv)
})
println("uv------------------" + uvRdd.collect().mkString(";"))

再看基于reduceByKey实现UV的统计

rdd2.map(t => {
((t._1,t._2),1)
})
.reduceByKey(_+_)
.map(_._1)
val uvRDD: RDD[(String, Int)] = rdd2.distinct()
.map(t => (t._1, 1))
.reduceByKey(_+_)
println("uv------------------" + uvRDD.collect().mkString(";"))

最终指标的合并

val pvuvRdd = pvRdd.fullOuterJoin(uvRdd)
.map(t => {
val date = t._1
val pv = t._2._1.getOrElse(0) //如果有值则返回对应的值,如果无值则返回0
val uv = t._2._2.getOrElse(0)
//返回结果
(date,pv,uv)
})

打印一下,可以看到合并的数据

数据输出(Driver、保存HDFS上,保存到RDBMS中)

数据返回给Driver

val result = pvuvRdd.collect()

保存到HDFS上

pvuvRdd.saveAsTextFile(s"hdfs://master:9000/data/pv_uv/${System.currentTimeMillis()}")

端口注意下,如果想用域名(master)就要确保在本地hosts文件配置了(win环境下)

运行一下,可以看到hdfs上有了这个文件

保存到RDBMS中、保存到非关系型数据库中

建库建表

CREATE DATABASE spark_test;

USE spark_test;

CREATE TABLE pvuv(
`date` DATE NOT NULL,
`pv` INT(11) NOT NULL,
`uv` INT(11) NOT NULL
)ENGINE=MYISAM DEFAULT CHARSET=utf8;

编写代码

其中val conn = DriverManager.getConnection("","","")这句话是url、user和password

代码

pvuvRdd.foreachPartition(iter => {
//1. 创建数据库连接对象
//2. 创建数据输出prepareStatement对象
val conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/spark_test","root","root")
val pstmt = conn.prepareStatement("insert into pvuv(date,pv,uv) values(?,?,?);")
//3. 数据迭代输出
iter.foreach(t => {
val date = t._1
val pv = t._2
val uv = t._3
pstmt.setString(1,date)
pstmt.setInt(2,pv)
pstmt.setInt(3,uv)
pstmt.executeUpdate()
})
//4. 关闭连接
conn.close()
pstmt.close()
})

运行代码,查看数据库

Spark案例练习-UV的统计的更多相关文章

  1. Spark案例练习-PV的统计

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新) 云盘目录说明: tools目录是安装包res   目录是每一个课件对应的代码和资源等doc  ...

  2. Spark案例练习-打包提交

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新)云盘目录说明:tools目录是安装包res 目录是每一个课件对应的代码和资源等doc 目录是一 ...

  3. Kafka与Spark案例实践

    1.概述 Kafka系统的灵活多变,让它拥有丰富的拓展性,可以与第三方套件很方便的对接.例如,实时计算引擎Spark.接下来通过一个完整案例,运用Kafka和Spark来合理完成. 2.内容 2.1 ...

  4. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  5. 【Spark-core学习之九】 Spark案例

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  6. spark 应用场景2-身高统计

    原文引自:http://blog.csdn.net/fengzhimohan/article/details/78564610 a. 案例描述 本案例假设我们需要对某个省的人口 (10万) 性别还有身 ...

  7. [spark案例学习] WEB日志分析

    数据准备 数据下载:美国宇航局肯尼迪航天中心WEB日志 我们先来看看数据:首先将日志加载到RDD,并显示出前20行(默认). import sys import os log_file_path =' ...

  8. Spark Streaming的样本demo统计

    废话不多说,直接上代码 package com.demo; import java.util.List; import java.util.regex.Pattern; import org.apac ...

  9. 【机器学习之二】python开发spark案例

    环境 spark-1.6 python3.5 一.wordcount # -*- coding:utf-8 -*- ''' Created on 2019年5月13日 @author: Adminis ...

随机推荐

  1. C#内建接口:IEnumerable

    这节讲一下接口IEnumerable. 01 什么是Enumerable 在一些返回集合数据的接口中,我们经常能看到IEnumerable接口的身影.那什么是Enumerable呢?首先它跟C#中的e ...

  2. Redis操作命令合集

    目录 一.客户端命令 二.sql命令 一.客户端命令 #读取配置文件启动 redis-server redis.conf #关闭 Redis,Redis服务器将断开与客户端链接,产生持久化文件,平滑关 ...

  3. DevOps的分与合

    一.抽象的 DevOps DevOps 是使软件开发和 IT 团队之间的流程自动化的一组实践,以便他们可以更快,更可靠地构建,测试和发布软件.DevOps 的概念建立在建立团队之间协作文化的基础上,这 ...

  4. ios http 同步异步请求处理

    转自:http://www.cnblogs.com/edisonfeng/p/3830224.html 一.服务端 1.主要结构:

  5. Linux core 文件浅析

    浅析Linux下core文件 当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方.最常出 现的,几乎所有C程序员都出现过的错误就是"段错误& ...

  6. [BUUCTF]PWN——wustctf2020_getshell1/2

    wustctf2020_getshell 附件 步骤: 例行检查,32位程序,开启了NX保护 本地试运行一下程序,看看大概的情况 32位ida载入,习惯性的检索程序里的字符串,发现了后门函数 shel ...

  7. [BUUCTF]PWN6——ciscn_2019_c_1

    [BUUCTF]PWN6--ciscn_2019_c_1 题目网址:https://buuoj.cn/challenges#ciscn_2019_c_1 步骤: 例行检查,64位,开启了nx保护 nc ...

  8. oracle11gR2、client及plsql完整安装与配置

    本文主要介绍Oracle11g,client及PLSQL的安装过程 一,oracle安装 安装环境:虚拟机win7 64 1.点击目录中 setup.exe文件 2.配置安全更新中,取消通过my or ...

  9. Python第三周 数据类型:集合set、文件的读写、追加操作。

    集合 知识点:集合是无序的 格式:{1,2,3,"str_test"} set_1 = set(list1)#将列表转换为集合 集合关系测试: 集合的逻辑判断.取交集.并集.差集. ...

  10. PC chrome开启自带的dark mode

    地址 复制下面的地址到chrome地址栏打开,再设置为 Enable 就可以开启了. chrome://flags/#enable-force-dark