大数据课程K3——Spark的常用案例

news2024/12/23 0:14:43

文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州

 ▲ 本章节目的

⚪ 掌握Spark的常用案例——WordCount;

⚪ 掌握Spark的常用案例——求平均值;

⚪ 掌握Spark的常用案例——求最大值和最小值;

⚪ 掌握Spark的常用案例——TopK;

⚪ 掌握Spark的常用案例——二次排序;

一、案例——WordCount

1. 实现步骤

1. 创建spark的项目,在scala中创建项目 导入spark相关的jar包。

2. 开发spark相关代码。

代码示例:

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object WordCountDriver {

  def main(args: Array[String]): Unit = {

    val conf=new SparkConf().setMaster("spark://hadoop01:7077").setAppName("wordcount")

    val sc=new SparkContext(conf)

    val data=sc.textFile("hdfs://hadoop01:9000/words.txt", 2)

    val result=data.flatMap { x => x.split(" ") }.map { x => (x,1) }.reduceByKey(_+_)

    result.saveAsTextFile("hdfs://hadoop01:9000/wcresult")

  }

}

3. 将写好的项目打成jar,上传到服务器,进入bin目录。

执行:spark-submit --class cn.tedu.WordCountDriver /home/software/spark/conf/wc.jar

二、案例——求平均值

案例文件:

1 16

2 74

3 51

4 35

5 44

6 95

7 5

8 29

10 60

11 13

12 99

13 7

14 26

正确答案:

42

代码示例一:

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object AverageDriver {

  def main(args: Array[String]): Unit = {

    val conf=new SparkConf().setMaster("local").setAppName("AverageDriver")

    val sc=new SparkContext(conf)

    val data=sc.textFile("d://average.txt")

    val ageData=data.map { line=>{line.split(" ")(1).toInt}}

    val ageSum=ageData.reduce(_+_)

    val pepopleCount=data.count()

    val average=ageSum/pepopleCount

    println(average)

  }

}

代码示例二:

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object AverageDriver {

  def main(args: Array[String]): Unit = {

    val conf=new SparkConf().setMaster("local").setAppName("AverageDriver")

    val sc=new SparkContext(conf)

    val data=sc.textFile("d://average.txt",3)

    val ageData=data.map { line=>{line.split(" ")(1).toInt}}

    val ageSum=ageData.mapPartitions{it=>{

      val result=List[Int]()

      var i=0

      while(it.hasNext){

        i+=it.next()

      }

      result.::(i).iterator

    }}.reduce(_+_)

    val pepopleCount=data.count()

    val average=ageSum/pepopleCount

    println(average)

  }

}

三、案例——求最大值和最小值

案例文件:

1 M 174

2 F 165

3 M 172

4 M 180

5 F 160

6 F 162

7 M 172

8 M 191

9 F 175

10 F 167

代码示例一:

package cn.tedu

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object MaxMinDriver {

  def main(args: Array[String]): Unit = {

    val conf=new SparkConf().setMaster("local").setAppName("MaxMin")

    val sc=new SparkContext(conf)

    val data=sc.textFile("d://MaxMin.txt")

    val manData=data.filter { x => x.contains("M") }.map {  x => x.split(" ")(2).toInt}

    val girlData=data.filter { x => x.contains("F") }.map {  x => x.split(" ")(2).toInt}

    println("Man Max is:"+manData.max()+"Man min is:"+manData.min())

  }

}

代码示例二:

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object MaxMinDriver {

  def main(args: Array[String]): Unit = {

    val conf=new SparkConf().setMaster("local").setAppName("MaxMin")

    val sc=new SparkContext(conf)

    val data=sc.textFile("d://MaxMin.txt")

    val manMax=data.filter { line => line.contains("M") }.

      sortBy({line=>line.split(" ")(2)},false).first().mkString

     val manMin=data.filter { line => line.contains("M") }.

      sortBy({line=>line.split(" ")(2)},true).first.mkString

    println(manMax+"\n"+manMin)

  }

}

代码示例三:

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object MaxMinDriver { 

  def main(args: Array[String]): Unit = {   

    val conf=new SparkConf().setMaster("spark://hadoop01:7077").setAppName("MaxMin")

    val sc=new SparkContext(conf)   

    val data=sc.textFile("hdfs://hadoop01:9000/MaxMin.txt",3)   

    val manMax=data.filter { line => line.contains("M") }.

      sortBy({line=>line.split(" ")(2)},false).first.mkString   

    val manMin=data.filter { line => line.contains("M") }.

      sortBy({line=>line.split(" ")(2)},true).first.mkString     

    val result=sc.makeRDD(Array(manMax,manMin))   

    //--spark输出文件时,默认是有几个Task,就会生成几个结果文件,

    //--所以如果想控制文件个数,控制分区数(task)即可

    result.coalesce(1,true).saveAsTextFile("hdfs://hadoop01:9000/MaxMinResult")   

  }

}

四、案例——TopK

1. 案例说明

Top K算法有两步,一是统计词频,二是找出词频最高的前K个词。

2. 案例代码

文件数据:

hello world bye world

hello hadoop bye hadoop

hello world java web

hadoop scala java hive

hadoop hive redis hbase

hello hbase java redis

代码示例:

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object TopkDriver { 

  def main(args: Array[String]): Unit = {

      val conf =new SparkConf().setMaster("local").setAppName("topk")

      val sc=new SparkContext(conf)     

      val data=sc.textFile("e://topk.txt",2)     

      val count=data.flatMap { x => x.split(" ") }

        .map { x => (x,1) }.reduceByKey(_+_)       

      val orderingDesc = Ordering.by [(String, Int), Int](_._2)     

      val topk=count.top(3)(orderingDesc)

      //val topk=count.top(3)(Ordering.by{case (word,count)=>count})      

      topk.foreach{println}    

  }

}

3. 应用场景

Top K的示例模型可以应用在求过去一段时间消费次数最多的消费者、访问最频繁的IP地址和最近、更新、最频繁的微博等应用场景。

五、案例——二次排序

文件数据:

aa 12

bb 32

aa 3

cc 43

dd 23

cc 5

cc 8

bb 33

bb 12

要求:先按第一例升序排序,再按第二列降序排序

自定义排序类代码:

class SecondarySortKey(val first:String,val second:Int) extends Ordered[SecondarySortKey] with Serializable { 

  def compare(other:SecondarySortKey):Int={

    var comp=this.first.compareTo(other.first)

    if(comp==0){

      other.second.compareTo(this.second)

    }else{

      comp

    }

  }

}

Driver代码:

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object SsortDriver { 

  def main(args: Array[String]): Unit = {   

    val conf=new SparkConf().setMaster("local").setAppName("ssort")

    val sc=new SparkContext(conf)

    val data=sc.textFile("d://ssort.txt",3)   

    val ssortData=data.map { line =>{

    (new SecondarySortKey(line.split(" ")(0),line.split(" ")(1).toInt),line)

    }

    }   

    val result=ssortData.sortByKey(true)   

    result.foreach(println)   

  }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/903336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.

​8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022&…

根据源码,模拟实现 RabbitMQ - 内存数据管理(4)

目录 一、内存数据管理 1.1、需求分析 1.2、实现 MemoryDataCenter 类 1.2.1、ConcurrentHashMap 数据管理 1.2.2、封装交换机操作 1.2.3、封装队列操作 1.2.4、封装绑定操作 1.2.5、封装消息操作 1.2.6、封装未确认消息操作 1.2.7、封装恢复数据操作 一、内存数据管理…

机器学习深度学习——NLP实战(情感分析模型——数据集)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——BERT(来自transformer的双向编码器表示) 📚订阅专栏:机器…

【数据结构】_7.二叉树

目录 1.树形结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的应用—表示文件系统的目录树结构 ​编辑​2.二叉树 2.1 概念 2.2 特殊二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 2.4.1 顺序存储结构(数组存储结构) 2.4.2…

LeetCode--HOT100题(36)

目录 题目描述:146. LRU 缓存(中等)题目接口解题思路代码 PS: 题目描述:146. LRU 缓存(中等) 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache…

引人关注的领域 ---- 信号稀疏表示

本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在学习摘录和笔记专…

redis实战-缓存数据解决缓存与数据库数据一致性

缓存的定义 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪,这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存…

基于蜉蝣算法优化的BP神经网络(预测应用) - 附代码

基于蜉蝣算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于蜉蝣算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.蜉蝣优化BP神经网络2.1 BP神经网络参数设置2.2 蜉蝣算法应用 4.测试结果:5.Matlab代码 摘要…

MySQL8.0.26-Linux版安装

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以; Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 MySQL :: Download MySQL Community Server (Archived Versions) 3. 上传MySQL安装包 4. 创建目录,并解压 mkdir mysql ​ tar -xvf mysql-8…

网站老域名跳转到新域名有哪些方法?内网穿透内网主机让外网访问

在网站服务器变更及本地主机搭建时,我们经常会遇到老域名地址跳转到新URL的配置,一些朋友还会面对无公网IP让外网访问的问题。今天我们来了解下网站老域名跳转到新域名有哪些方法,以及如何通过内网穿透实现内网主机让外网访问。 网站老域名跳…

【Unity小技巧】Unity2D TileMap的探究(最简单,最全面的TileMap使用介绍)

文章目录 前言介绍一、TileMap简单的使用1、创建Unity工程2、Tilemap的使用2.1、导入素材图片2.2、切割图片2.3、创建画板2.4、创建瓦片2.5、创建网格2.6、在网格上刷瓦片2.7、解决瓦片没有占满格子的问题2.8、解决瓦片之间有缝隙的问题2.9、擦除瓦片2.10、区域瓦片绘制2.11、瓦…

适合上班族做的4个低门槛的副业兼职

对于大多数职场中人来说,如果没有在30岁之后获得晋升,获得更好的发展平台,可能就会感到工作缺乏足够的吸引力了。当我们只有一份工作的时候,就好比把鸡蛋放在一个篮子里,把自己的青春放在一家公司里。这也就好比单一的…

华盛顿大学Baker实验室率先设计出双稳态结构蛋白质

在蛋白质世界,“结构决定功能”是一条基本原则。因此,很多人可能认为,一个蛋白质就应该有一个唯一确定的结构,使得它能够去执行确定的生物学功能。其实,在真实的世界中,蛋白质大多都是处于一种不断起伏的动…

MongDB【CRUD练习-条件查询-文档关系】

练习1-CRUD // 进入test数据库 use test; // 查询文档内容 db.students.find(); // 显示当前数据库中所有集合 show collections; // 向数据库的user集合中插入一个文档 db.users.insertOne({username: "lyh"} ); // 查看当前数据库中所有的集合 发现users集合被创建…

信号处理--基于EEG脑电信号的眼睛状态的分析

本实验为生物信息学专题设计小项目。项目目的是通过提供的14导联EEG 脑电信号,实现对于人体睁眼和闭眼两个状态的数据分类分析。每个脑电信号的时长大约为117秒。 目录 加载相关的库函数 读取脑电信号数据并查看数据的属性 绘制脑电多通道连接矩阵 绘制两类数据…

《强化学习:原理与Python实战》——可曾听闻RLHF

前言: RLHF(Reinforcement Learning with Human Feedback,人类反馈强化学习)是一种基于强化学习的算法,通过结合人类专家的知识和经验来优化智能体的学习效果。它不仅考虑智能体的行为奖励,还融合了人类专家…

LeetCode算法递归类—二叉树的右视图

目录 199. 二叉树的右视图 题解: 目标: 思路: 过程: 代码: 运行结果: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所…

使用渲染纹理(RenderTexture)来实现3D视觉

如上图的效果,使用2D场景,通过摄像头的改动,使其看起来像是3D效果一样。 Nintendo Switch上刚推出的《超级马里奥》中,有一些关卡混合了2D和3D的画面, 一般来说,摄像机会直接渲染到电脑屏幕;…

【C语言练习】数组OJ题

目录 一.消失的数字思路1:思路2: 二.移除元素三.轮转数组四.删除有序数组中的重复项五.合并两个有序数组 一.消失的数字 题目: 思路1: 数组是从0加到N,所以把0到N的数加起来减去数组中的值,结果就是消失…

阿里云ECS服务器和轻量应用服务器区别?怎么选择?

阿里云轻量应用服务器和云服务器ECS有什么区别?ECS是专业级云服务器,轻量应用服务器是轻量级服务器,轻量服务器使用门槛更低,适合个人开发者或中小企业新手使用,可视化运维,云服务器ECS适合集群类、高可用、…