承接上一篇文档《Spark应用的结构》

参数说明:

创建一个Maven项目

Pom文件引入jar,配置信息已经完成,大家可以直接去网盘下载,版本号根据自己的安装情况调整

部分示例

创建一个scala文件,编写代码

1. 构建SparkContext上下文对象

val conf = new SparkConf()val sc = new SparkContext(conf)

此时可以运行这两行代码

会出现错误

需要添加一行代码

setMaster("local")// 指定应用在哪儿执行,可以是local、或者stadnalone、yarn、mesos集群

再运行一次

又报一次错,这个是要求指定应用的名字

添加代码

.setAppName("pvtest") //指定应用的名字

再运行就可以了(启动hadoop)

2. 基于sc构建RDD

端口为core-site.xml中配置的

将文件上传到指定目录

val path = "hdfs://ip:8020/data/page_views.data" //HDFS的schema 给定数据的路径val rdd: RDD[String] = sc.textFile(path)println("总共有" + rdd.count()+ "条数据")

运行可以看到显示

如果不想写schema的话,需要将hadoop的两个文件拷贝到项目的src/main/resources中

两个文件是hadoop的:hdfs-site.xml和core-site.xml

编写代码

val path = /data/page_views.data

运行也可以查看到结果

3. 业务实现

思路:

(1)分析可知道:数据分为7个字段,业务需要三个字段(时间,URL,guid),计算某一个时间的PV的值(2)数据进行过滤清洗,获取两个字段(时间、url)(3)url非空,时间非空,时间字符串的长度必须大于10(4)sql: select date, count(url) from page_view group by date;(5)sql: select date, count(1) from page_view group by date;(6)分别用reduceByKey和groupByKey进行数据处理

我们一步步来

先分割数据

val rdd1 = rdd.map(line => line.split(""))

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

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

.filter(arr => {//保留正常数据arr.length >2 && arr(1).trim.nonEmpty && arr(0).trim.length > 10})

截取数据

.map(arr => {val date = arr(0).trim.substring(0,10)val url = arr(1).trim(date,1) // (date,url)})

基于reduceByKey做统计pv

val pvRdd = rdd1.reduceByKey(_+_)println("pv------------------" + pvRdd.collect().mkString(";"))

数据表示2013年5月19日一共有100000条访问数据

也可以基于groupByKey实现pv统计(这个可以试一下,如果不行就使用reduceByKey)

groupByKey相当于把相同的key的value放到迭代器里面,也就是这些value都放到内存里面,如果value值数据量撑爆内存,就会OOM异常

val pvRdd = rdd1.groupByKey().map(t => {val date = t._1val pv = t._2.size(date,pv)})println("pv------------------" + pvRdd.collect().mkString(";"))

与上面值相同

spark filter过滤某个字段在几个值里面_Spark案例学习-PV的统计相关推荐

  1. django 模型类的常见字段约束,以及filter 过滤和查询

    null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...

  2. SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  3. PostgreSQL 范围过滤 + 其他字段排序OFFSET LIMIT(多字段区间过滤)的优化与加速

    标签 PostgreSQL , 范围过滤 , 其他字段排序 , 索引 , offset , limit 背景 在索引扫描中,如果两个字段扫描都是区间扫描,那么只能用到某个字段的过滤条件,另一个字段需要 ...

  4. Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计

    Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计 文章目录 Elasticsearch实战-查询query,filter过滤,结合aggs 进行局 ...

  5. Log4j日志分类和过滤敏感字段

    项目上线时,需要对项目做安全检查,其中有两项是对输出日志进行分类和过滤掉日志中敏感字段. 项目使用Log4j日志系统,下面简单介绍下这两项要求的实现方式. 对日志进行分类,要求调用其他服务的API日志 ...

  6. TDI Filter 过滤驱动

    By Fanxiushu  2013, 引用和转载请注明原作者 为了让大家有兴趣阅读下去, 举个正在使用的可能大家都比较熟悉的例子: 360 的安全卫士里,有个流量防火墙的功能, 它可以监视每个进程的 ...

  7. Elasticsearch query和filter过滤有什么不同

    1. 概述 在使用DSL进行Elasticsearch的查询中,通常我们都是使用query进行过滤匹配,比如下面这段代码 GET /my_index/_search {"query" ...

  8. 验证多个Filter过滤一个资源时执行顺序

    当有多个Filter过滤一个资源时,执行顺序到底是怎样? 如下测试: 定义两个Filter,FirstFilter,SecondFilter,它们过滤同一个index.jsp页面,并且SecondFi ...

  9. SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能

    本教程的上一个步骤,我们学习了如何基于 OData V4 开发一个最简单的使用了 Table(表格)控件的 SAP UI5 应用. SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 ...

  10. Android利用Filter过滤数据

    MainActivity如下: package cc.testfilterable;import java.util.ArrayList; import java.util.HashMap; impo ...

最新文章

  1. AAAI 2020论文解读:商汤科技提出新弱监督目标检测框架
  2. 华南赛区线上比赛安排
  3. php 按汉字首字母查询[转载]
  4. 安装失败java.lang_linux安装jdk出现java/lang/NoClassDefFoundError: java/lang/Object错误的解决方案...
  5. C语言——反弹球游戏(第二阶段
  6. 前端构建新世代,Esbuild 原来还能这么玩!
  7. html中ng-src,angular项目中,ie中iframe动态的ng-src,如果是路由的地址(带有#的url),页面不显示,googel却正常...
  8. linux 执行安装脚本,批量执行Linux安装程序和脚本
  9. 图像处理-绘制直方图
  10. 链表的基本操作(单链表)
  11. OpenCV-Python教程(6、Sobel算子)
  12. STM32野火教程学习
  13. 学计算机基础的重要性,论计算机基础的重要性
  14. P3369 【模板】普通平衡树 Treap树堆学习笔记
  15. 神话情话(神雕侠侣主题曲)铃声 神话情话(神雕侠侣主题曲)手机...
  16. seo和网站服务器有什么区别,SEO与竞价推广有什么不同?
  17. [Vulkan教程]绘制一个三角形/呈现/交换链(Swip chain)
  18. 解决Web移动端Fixed布局的方案(防止页面露底、overflow-scrolling、iOS下的 Fixed + Input BUG现象、isScroll.js)
  19. STM32学习之CAN控制器简介
  20. clk_get函数介绍

热门文章

  1. 【MySQL】外键踩坑集
  2. matlab输入一个正的实数x,VB程序题:用InputBox 输入一个正实数,用Pring方法在一行上显示出它的平方和平方根、立方和立方根,每个数保留三位小数,其间有间隔。...
  3. python处理csv文件计算均值_PYTHON实现对CSV文件多维不同单位数据的归一化处理
  4. python翻译爬虫_python 翻译爬虫
  5. 一定质量的封闭气体被压缩后_详解螺杆压缩机工作原理及结构
  6. php通用下载方法,PHP实现打包下载文件的方法示例
  7. 【转】java中的Map集合
  8. 堆排序算法(C#实现)
  9. Error:Execution failed for task ':app:lint'.
  10. Let’s Encrypt 推动了 HTTPS 的普及