利用Scala与spark-sql两种方式分析海量数据

前言:
Mapreduce和Spark的都是并行计算,那么他们有什么相同和区别

相同:两者都是用mr模型来进行并行计算
区别:MapReduce这些并行计算大都是基于非循环的数据流模型,
也就是说,一次数据过程包含从共享文件系统读取数据、进行计算、完成计算、写入计算结果到共享存储中,在计算过程中,不同计算节点之间保持高度并行,
这样的数据流模型使得那些需要反复使用一个特定数据集的迭代算法无法高效地运行。   
Spark和Spark使用的RDD就是为了解决这种问题而开发出来的,Spark使用了一种特殊设计的数据结构,称为RDD。
RDD的一个重要特征是,分布式数据集可以在不同的并行环境当中被重复使用,这个特性将Spark和其他并行数据流模型框架(如MapReduce)区别开。
hadoop的job只有map和reduce操作,表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系。 spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操作如join,groupby

本次所分析数据部分截取
字段分别为 ip 时间 操作方式以及访问地址 返回状态码 数据量字节数:

36.57.154.177 [12/Aug/2020:01:21:39+0800] "POST/dataman/zkau" 200 63
36.57.154.177 [12/Aug/2020:01:21:40+0800] "GET/dataman/image/main/new/sousuo_selected.png" 304 -
36.57.154.177 [12/Aug/2020:01:21:42+0800] "POST/dataman/zkau" 200 63
36.57.154.177 [12/Aug/2020:01:21:51+0800] "POST/dataman/zkau" 200 62
36.57.154.177 [12/Aug/2020:01:21:51+0800] "POST/dataman/zkau" 200 107
36.57.154.177 [12/Aug/2020:01:21:51+0800] "POST/dataman/zkau" 200 63
36.57.154.177 [12/Aug/2020:01:21:51+0800] "POST/dataman/zkau" 200 62
36.57.154.177 [12/Aug/2020:01:21:51+0800] "POST/dataman/zkau" 200 107
36.57.154.177 [12/Aug/2020:01:21:51+0800] "POST/dataman/zkau" 200 63

1:计算独立IP数:
spark-sql解决:

结果截图:
Scala代码解决:

package com.zgy.tranimport org.apache.spark.{SparkConf, SparkContext}object AloneIpCount {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local").setAppName("SparkMap")val sc = new SparkContext(conf)val linesRDD = sc.textFile("F:\\BaiduNetdiskDownload\\webcrawler\\data\\tran\\localhost_access_log.txt");val value = linesRDD.map(t=>t.split(" ")(0)).map(ip=>(ip,1)).distinct().count()println(value)}}

结果截图:

2:统计每个图片独立IP数 (图片为地址中含有.png)
spark-sql解决:

结果截图:

Scala代码解决:

package com.zgy.tranimport org.apache.spark.{SparkConf, SparkContext}object PngCount {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local").setAppName("SparkMap")val sc = new SparkContext(conf)val linesRDD = sc.textFile("F:\\BaiduNetdiskDownload\\webcrawler\\data\\tran\\localhost_access_log.txt");val png = linesRDD.map(t => t.split(" ")(2)).filter(p=>p.endsWith("png\"")).map(p2=>(p2,1))val value = png.reduceByKey(_+_).foreach(println)}}

结果截图:

3:统计一天中每个小时的流量
spark-sql解决:

结果截图:

Scala代码解决:

package com.zgy.tranimport org.apache.spark.{SparkConf, SparkContext}object HourFlow {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local").setAppName("SparkMap")val sc = new SparkContext(conf)val linesRDD = sc.textFile("F:\\BaiduNetdiskDownload\\webcrawler\\data\\tran\\localhost_access_log.txt");val value = linesRDD.map(t=>t.split(" ")(1)).map(rn=>rn.substring(1,15)).map(ln=>(ln,1)).reduceByKey(_+_).foreach(println)}}

结果截图:

Spark学习之路(二)相关推荐

  1. Spark学习之路一——Spark基础及环境搭建

    Spark学习之路一--Spark基础及环境搭建 文章目录 一. Spark 概述 1.1 概述 1.2 优势特性 1.2.1 运行速度快 1.2.2 容易使用 1.2.3 通用性 1.2.4 运行模 ...

  2. Hive学习之路(二):Hive表操作详讲

    操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...

  3. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  4. python 剑指offer 学习之路(二)

    剑指offer 学习之路 合并两个排序的链表 树的子结构 顺时针打印矩阵 包含min函数的栈 从上往下打印二叉树 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 数组中出现次数超过 ...

  5. Spark学习之路 (二)Spark2.3 HA集群的分布式安装

    <2021年最新版大数据面试题全面开启更新> 欢迎关注github<大数据成神之路> 目录 一.下载Spark安装包 1.从官网下载 2.从微软的镜像站下载 3.从清华的镜像站 ...

  6. Spark学习之路 (二十二)SparkStreaming的官方文档

    讨论QQ:1586558083 目录 一.简介 1.1 概述 1.2 一个小栗子 2.2 初始化StreamingContext 2.3 离散数据流 (DStreams) 2.4 输入DStream和 ...

  7. Spark学习之路 (二十三)SparkStreaming的官方文档

    一.SparkCore.SparkSQL和SparkStreaming的类似之处 二.SparkStreaming的运行流程 2.1 图解说明 2.2 文字解说 1.我们在集群中的其中一台机器上提交我 ...

  8. Spark学习之路(八):分别使用Java与Scala实现Spark二次排序

    内容简介 一.Spark二次排序的概念 二.实现二次排序的详细步骤(Java语言) 三.二次排序代码演示 1.Java版本 2.Scala版本 四.总结 一.Spark二次排序的概念 排序操作是数据处 ...

  9. Spark学习之路 (三)Spark之RDD

    <2021年最新版大数据面试题全面开启更新> 欢迎关注github<大数据成神之路> 目录 一.RDD的概述 1.1 什么是RDD? 1.2 RDD的属性 1.3 WordCo ...

最新文章

  1. 中文语境下的手机号识别
  2. LTE/NR用户接入过程笔记
  3. php变量与数据类型,php中变量与数据类型讲解
  4. AcWing算法提高课 Level-3 第二章 搜索
  5. 程序员面试系列——冒泡排序
  6. spring boot 整合mongoDb
  7. 如何确定CPU是大端字节序还是小端字节序?
  8. 【Hive】一次被分区条件和笛卡尔积制裁的经历
  9. spring viewResolver 类别
  10. 从零开始编写深度学习库(二)FullyconnecteLayer CPU编写
  11. mongodb获取数组中只符合条件的元素
  12. 软件过程模型(详解)
  13. 一组绝对有益于科研的随想录(转载)
  14. linux ipp,Get Started with Intel® Integrated Performance Primitives
  15. 路由器交换机之重设密码
  16. json vs jsonb,及常用
  17. 卷积法求解系统的零状态响应_因果系统的零状态响应的一种简易计算方法
  18. 了不起的 Webpack HMR 学习指南(含源码分析)
  19. DV2020T 综合
  20. Matlab中的匿名函数如何使用?

热门文章

  1. 花了我一天一夜整理出的软件测试学习路线
  2. 吉大c 语言程序设计奥鹏作业,吉大20春学期《可编程控制器》在线作业一百分...
  3. rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...
  4. php 操作txt,PHP 从txt文件中读取数据
  5. elasticsearch: 权威指南_你还不会Elasticsearch的CUD?
  6. python的helper_SQLHelper ------ python实现
  7. 动态数组怎么定义_动态规划最长回文子序列
  8. opencv resize_利用OpenCV 识别两张相似的图片
  9. 后端返回html标签到前端,后端返回的HTML代码字符串怎么能自动渲染到前端页面...
  10. php+redis+两种驱动,redis的php驱动两种方式