Spark-Scala语言实战(15)
在之前的文章中,我们学习了如何在spark中使用键值对中的学习键值对方法中的lookup,cogroup两种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。
Spark-Scala语言实战(14)-CSDN博客文章浏览阅读1.5k次,点赞33次,收藏25次。今天开始的文章,我会带给大家如何在spark的中使用我们的键值对方法,今天学习键值对方法中的lookup,cogroup两种方法。希望我的文章能帮助到大家,也欢迎大家来我的文章下交流讨论,共同进步。https://blog.csdn.net/qq_49513817/article/details/137441090
今天的文章开始,我会带着大家来做三道任务,运用之前学到的方法,温故知新,举一反三,将知识紧紧掌握,希望你能在我的文章中有所收获。
目录
一、知识回顾
二、任务实现
1.使用Spark完成单词去重
2.使用Spark统计133 136 139开头的总流量
3.完成统计相同字母组成的单词
一、知识回顾
上一篇文章中我们学习了RDD键值对的两种方法,分别是lookup,cogroup。
lookup是我们的查找方法,它用于返回我们指定键所对应的值。

我们创建了两个RDD一个名为p包含了我们的键值对,一个名为pp包含了我们需要查找的键。然后使用 map来实现我们的lookoup方法。
运行代码它就会返回我们需要的键所对应的值,没有就会输出None
然后就是我们 cogroup方法。它是一种常见的组合操作,用于合并两个或多个数据组中具有相同键的数据。

可以看到代码我们通过 cogroup方法将p1,p2组合到一起了,那么收集结果打印出来会是什么样子呢?

它将我们值通过键全部合并在一起了
复习完毕,现在开始今天的学习吧~
二、任务实现
1.使用Spark完成单词去重
现在我们有一个名为text01的txt文件
它里面的数据如下:
java php hello word
php hi exe java
python hello kitty
php happy abc java
现在,我们需要用到之前所学的知识将它进行去重操作
解题思路:
首先我们肯定要将文件的内容读取出来
val p = sc.textFile("C:\\IDEA\\P1\\p1\\text01.txt")
然后就是切分我们文件的内容,将它里面的单词转换成一个数组啊,列表啊或者其他,根据需求转化。
def pp(line: String): Array[String] = {line.split("\\s+")//'\s+中\ 是转义字符。s 是代表空白字符的元字符。+ 表示前面的字符或组(在这里是 \s)可以出现一次或多次。'}
这里我们使用了一个\\s+,它的意思注释的很清楚,主要作用还是设置我们的切分。
现在准备工作做完了就可以开始去重了
val ppp= p.flatMap(pp)val pppp = ppp.distinct().collect()pppp.foreach(println)
使用我们的distinct()方法进行去重操作,最后收集RDD数据并打印
完整代码:
import org.apache.spark.{SparkConf, SparkContext}object p1 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local").setAppName("ppp")val sc = new SparkContext(conf)val p = sc.textFile("C:\\IDEA\\P1\\p1\\text01.txt")def pp(line: String): Array[String] = {line.split("\\s+")//'\s+中\ 是转义字符。s 是代表空白字符的元字符。+ 表示前面的字符或组(在这里是 \s)可以出现一次或多次。'}val ppp= p.flatMap(pp)val pppp = ppp.distinct().collect()pppp.foreach(println)}
}
运行代码:
可以看到成功完成任务需求,读取外部文件并去重。
2.使用Spark统计133 136 139开头的总流量
我们这里有两对数据,分别是手机号和使用的流量
13326293050 81
13626594101 50
13326435696 30
13926265119 40
13326564191 2106
13626544191 1432
13919199499 300
我们需要将它通过手机号前三位区分,然后统计133 136 139开头的总流量
解题思路:
在这里,我想到的方法是创建一个键值对,将手机号和流量进行一个对应
val p = sc.parallelize(Array((13326293050L, 81),(13626594101L, 50),(13326435696L, 30),(13926265119L, 40),(13326564191L, 2106),(13626544191L, 1432),(13919199499L, 300)//int超出存储限制,添加L变为long))
然后进行取前手机号三位并且使用groupByKey方法分组的方法
val pp = p.map { case (phone, value) =>val prefix = (phone / 1000000).toString.take(3)(prefix, value)}.groupByKey()//取出前三位并分组
最后将我们三个组里的数据进行一个sum求和并打印
val ppp=pp.mapValues(_.sum)//值相加ppp.foreach(println)
完整代码:
import org.apache.spark.{SparkConf, SparkContext}object p2 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local").setAppName("ppp")val sc = new SparkContext(conf)val p = sc.parallelize(Array((13326293050L, 81),(13626594101L, 50),(13326435696L, 30),(13926265119L, 40),(13326564191L, 2106),(13626544191L, 1432),(13919199499L, 300)//int超出存储限制,添加L变为long))val pp = p.map { case (phone, value) =>val prefix = (phone / 1000000).toString.take(3)(prefix, value)}.groupByKey()//取出前三位并分组val ppp=pp.mapValues(_.sum)//值相加ppp.foreach(println)}
}
运行代码:

完成任务,分组并统计流量
3.完成统计相同字母组成的单词
现在我们有一个名为text02的txt文件
它里面的数据如下:
abc acb java
avaj bac
cba abc
jvaa php hpp
pph python thonpy
现在,我们需要用到之前所学的知识将它统计相同字母组成的单词出现的次数。
解题思路:
首先,肯定还是要读取文件
val p = sc.textFile("C:\\IDEA\\P1\\p1\\text02.txt")
然后对单词中的字母排序
def sortLetters(word: String): String = {word.toLowerCase().replaceAll("\\s+", "").sorted}
最后,分割单词,进行排序与reduceByKey方法统计
val pp = p.flatMap(_.split("\\s+")) // 分割每行文本为单词.map(word => (sortLetters(word), 1)) // 对单词中的字母进行排序,并映射到计数1.reduceByKey(_ + _) // 统计相同字母组成的单词数量
收集数据并打印
pp.collect().foreach(println)
完整代码:
import org.apache.spark.{SparkConf, SparkContext}object p3 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local").setAppName("ppp")val sc = new SparkContext(conf)val p = sc.textFile("C:\\IDEA\\P1\\p1\\text02.txt")// 用于对单词中的字母进行排序def sortLetters(word: String): String = {word.toLowerCase().replaceAll("\\s+", "").sorted}// 对每一行文本进行处理,统计具有相同字母组成的单词数量val pp = p.flatMap(_.split("\\s+")) // 分割每行文本为单词.map(word => (sortLetters(word), 1)) // 对单词中的字母进行排序,并映射到计数1.reduceByKey(_ + _) // 统计相同字母组成的单词数量pp.collect().foreach(println)}
}
运行代码:
完成任务,统计相同字母组成的单词次数
最后,代码的可变性很多,不同的写法不同的方法有时候也能完成相同的任务。我的解题思路可以当作一种参考,期待大家能用自己不同的方式完成任务。
相关文章:
Spark-Scala语言实战(15)
在之前的文章中,我们学习了如何在spark中使用键值对中的学习键值对方法中的lookup,cogroup两种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞&#…...
【SpringBoot XSS存储漏洞 拦截器】Java纯后端对于前台输入值的拦截校验实现 一个类加一个注解结束
先看效果: 1.js注入拦截: 2.sql注入拦截 生效只需要两步: 1.创建Filter类,粘贴如下代码: package cn.你的包命.filter; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IO…...
【微信小程序】canvas开发笔记
【微信小程序】canvasToTempFilePath:fail fail canvas is empty 看说明书 最好是先看一下官方文档点此前往 如果是canvas 2d 写canvas: this.canvas,,如果是旧版写canvasId: ***, 解决问题 修改对应的代码,如下所示,然后再试试运行&#x…...
TripoSR: Fast 3D Object Reconstruction from a Single Image 论文阅读
1 Abstract TripoSR的核心是一个基于变换器的架构,专为单图像3D重建设计。它接受单张RGB图像作为输入,并输出图像中物体的3D表示。TripoSR的核心包括:图像编码器、图像到三平面解码器和基于三平面的神经辐射场(NeRF)。…...
u盘为什么一插上电脑就蓝屏,u盘一插电脑就蓝屏
u盘之前还好好的,可以传输文件,使用正常,但是最近使用时却出现问题了。只要将u盘一插入电脑,电脑就显示蓝屏。u盘为什么一插上电脑就蓝屏呢?一般,导致的原因有以下几种。一,主板的SATA或IDE控制器驱动损坏…...
【Redis】redis面试相关积累
Redis到底是多线程还是单线程? Redis 在设计上是单线程的,这意味着 Redis 服务器在任何给定时刻只能执行一个命令。然而,这并不意味着 Redis 无法利用多核 CPU,因为 Redis 使用了一些技术来提高性能和并发性,例如非阻…...
【Linux】进程的状态(运行、阻塞、挂起)详解,揭开孤儿进程和僵尸进程的面纱,一篇文章万字讲透!!!!进程的学习②
目录 1.进程排队 时间片 时间片的分配 结构体内存对齐 偏移量补充 对齐规则 为什么会有对齐 2.操作系统学科层面对进程状态的理解 2.1进程的状态理解 ①我们说所谓的状态就是一个整型变量,是task_struct中的一个整型变量 ②.状态决定了接下来的动作 2.2运行状态 2.…...
前端js基础知识(八股文大全)
一、js的数据类型 值类型(基本类型):数字(Number)、字符串(String)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol,大数值类型(BigInt) 引用数据类型:对象(Object)、数组…...
316_C++_xml文件解析成map,可以放到表格上 + xml、xlsx文件互相解析
xml文件例如: <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <TrTable> <tr id"0" label"TR_PB_CH" text"CH%2"/> <tr id"4" label"TR_PB_CHN"…...
未来汽车硬件安全的需求(2)
目录 4.汽车安全控制器 4.1 TPM2.0 4.2 安全控制器的硬件保护措施 5. EVITA HSM和安全控制器结合 6.小结 4.汽车安全控制器 汽车安全控制器是用于汽车工业安全关键应用的微控制器。 他们的保护水平远远高于EVITA HSM。今天的典型应用是移动通信,V2X、SOTA、…...
html+javascript,用date完成,距离某一天还有多少天
图片展示: html代码 如下: <style>* {margin: 0;padding: 0;}.time-item {width: 500px;height: 45px;margin: 0 auto;}.time-item strong {background: orange;color: #fff;line-height: 100px;font-size: 40px;font-family: Arial;padding: 0 10px;margin-right: 10px…...
跟bug较劲的第n天,undefined === undefined
前情提要 场景复现 看到这张图片,有的同学也许不知道这个冷知识,分享一下,是因为我在开发过程中踩到的坑,花了三小时排查出问题的原因在这,你们说值不值。。。 我分享下我是怎么碰到的这个问题,下面看代码…...
数据结构_基于链表的通讯录
顺序表的源代码需要略作修改,如下 将数据类型改为通讯录的结构体。注释掉打印,查找的函数。 SList.h #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<stdlib.h> #include<assert.h> #include"Contact.h"ty…...
jenkins+gitlab配置
汉化 1、安装Localization: Chinese (Simplified)插件 (此处我已安装) (安装完成后重启jenkins服务即可实现汉化) 新增用户权限配置 1、安装插件 Role-based Authorization Strategy 2、全局安全配置 3、配置角色权限 4、新建…...
【Labview】虚拟仪器技术
一、背景知识 1.1 虚拟仪器的定义、组成和应用 虚拟仪器的特点 虚拟仪器的突出特征为“硬件功能软件化”,虚拟仪器是在计算机上显示仪器面板,将硬件电路完成信号调理和处理功能由计算机程序完成。 虚拟仪器的组成 硬件软件 硬件是基础,负责将…...
IvorySQL 3.2原理解析|与Oracle 12c XML函数兼容性的实现机制
[发行日期:2024年4月11日] IvorySQL 3.2基于PostgreSQL 16.2,引入了多种Oracle XML函数的全面兼容性功能,同时修复了多个问题,更多信息请参考文档网站。 >>>新版本体验链接: https://docs.ivorysql.org/cn…...
SpringBoot + Dobbo + nacos
SpringBoot Dobbo nacos 一、nacos https://nacos.io/zh-cn/docs/quick-start.html 1、下载安装包 https://github.com/alibaba/nacos/releases/下载后在主目录下,创建一个logs的文件夹:用来存日志 2、启动nacos 在bin目录下打开cmd运行启动命令&a…...
学习笔记-微服务基础(黑马程序员)
框架 spring cloudspring cloud alibaba Eureka eureka-server 注册中心 eureka-client 客户端每30s发送心跳服务 服务消费者服务提供者 server 依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-star…...
每日Bug汇总--Day05
Bug汇总—Day05 一、项目运行报错 二、项目运行Bug 1、**问题描述:**前端将从后台查询的数据作为参数进行get请求,参数为空 原因分析: 这种写法可能只支全局的参数调用方法的传参响应 代码实现 if (this.jishiName) {this.$http({url…...
docker、ctr、crictl命令对比
命令dockerctr(containerd)crictl(kubernetes)查看运行的容器docker psctr task ls/ctr container lscrictl ps查看镜像docker imagesctr image lscrictl images查看容器日志docker logs无crictl logs查看容器数据信息docker insp…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
