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)
  }
}

  运行代码:

  完成任务,统计相同字母组成的单词次数

 最后,代码的可变性很多,不同的写法不同的方法有时候也能完成相同的任务。我的解题思路可以当作一种参考,期待大家能用自己不同的方式完成任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5. @Autowired与@Resource的区别

在上一节我们使用Autowired进行了bean的装配,Autowired与Resource都可以用来装配bean,但它们之前还是有一些区别,它们的区别具体体现为以下几点: 来源不同对Constructor注入的支持不同查找顺序不同支持参数不同 1. 来源不同 Re…

事务隔离级别(图文详解)

事务隔离级别(图文详解) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元…

Chatgpt掘金之旅—有爱AI商业实战篇|SEO 咨询业务|(十七)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、AI技术创业在SEO 咨询业务有哪些机会? 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随…

触发 hover 效果时,设置文字底部横杠显示

需求描述 需要在鼠标悬停时显示文字效果及下面出现一个横条&#xff0c;如图 <!-- 页面结构 --> <nav><ul><li>精选</li><li>女装</li><li>男装</li><li>彩妆</li><li>运动</li><li>家…

本科大学生计算机毕业设计案例:遗失物品信息管理系统

设计需求&#xff1a; 客户需求&#xff1a; 项目所用技术&#xff1a; 后端&#xff1a;springBoot,mybatisPlus,springSecurity,Swagger2 前端&#xff1a;vue-element-admin,elementUi 数据库&#xff1a;mysql&#xff0c;redis 数据库表设计&#xff1a; 关键代码展示&a…

Springboot+Vue项目-基于Java+MySQL的在线视频教育平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

linux学习:标准IO

目录 接口 打开文件 关闭文件 读写 每次一个字符的读写标准 IO 函数接口 每次一行的读写标准 IO 函数接口 每次读写若干数据块的标准 IO 函数接口 获取或设置文件当前位置偏移量 标准格式化 IO 函数 系统 IO 的最大特点一个是更具通用性&#xff0c;不管是普通文件、管…

障碍物识别技术赋能盲人独立出行:一场静默的科技革新

作为一名资深记者&#xff0c;我始终关注并报道那些科技如何助力特殊群体克服生活挑战的动人故事。近期&#xff0c;一款叫做蝙蝠避障的应用进入了我的视线&#xff0c;它搭载先进障碍物识别技术以其独特的优势&#xff0c;悄然为视障人士的独立出行带来了显著变革。 “障碍物识…

asm磁盘组无法写入问题-处理中

有个11204的rac环境&#xff0c;没应用补丁&#xff0c;5号突然报归档满&#xff0c;登录环境后发现奇怪&#xff0c;一个1T磁盘建成的DATA磁盘组使用了近800G&#xff0c;读写正常&#xff0c;一个1.5T磁盘建成的FRA磁盘组&#xff0c;目前还剩余729551M&#xff0c;无法写入归…

AutoCAD之DWF三维信息提取---linux编译篇

1. 权限 1.1 给文件添加执行权限 chmod x autogen.sh1.2.给当前文件下的所有文件改变为读写执行权限 chmod 777 * -R 2.环境安装 2.1安装automake 1.4.1 安装链接 安装中遇到的问题及解决 2.2安装autoconf 2.3 安装libtool 2.4 安装Cmake(CMake包含) cmake安装在cent…

STM32—DMA直接存储器访问详解

DMA——直接存储器访问 DMA&#xff1a;Data Memory Access, 直接存储器访问。 DMA和我们之前学过的串口、GPIO都是类似的&#xff0c;都是STM32中的一个外设。串口是用来发送通信数据的&#xff0c;而DMA则是用来把数据从一个地方搬到另一个地方&#xff0c;而且不占用CPU。…

windows本地运行dreamtalk踩坑总结

dreamtalk是一个语音图片转视频的一个工具&#xff0c;就是给一段语音加一个头像图片&#xff0c;然后生成一段头像跟语音对口型的视频&#xff0c;其实还是很有意思的&#xff0c;最近阿里发布了一个类似的模型&#xff0c;但是还没开源&#xff0c;从展示视频看&#xff0c;阿…

酷开科技OTT大屏营销:开启新时代的营销革命

随着互联网技术的不断发展和普及&#xff0c;大屏已经成为越来越多家庭选择的娱乐方式。在这个背景下&#xff0c;酷开科技凭借其强大的技术实力和敏锐的市场洞察力&#xff0c;成功地将大屏转化为一种新的营销渠道&#xff0c;为品牌和企业带来了前所未有的商业机会。 酷开科技…

WEB3.0:互联网的下一阶段

随着互联网的发展&#xff0c;WEB3.0时代正在逐步到来。本文将深入探讨WEB3.0的定义、特点、技术应用以及未来展望&#xff0c;为读者带来全新的思考。 一、什么是WEB3.0&#xff1f; WEB3.0可以被理解为互联网发展的下一阶段&#xff0c;是当前WEB2.0的升级版。相较于2.0时代…

CentOS 各个版本下载地址

https://mirror.nsc.liu.se/centos-store/7.6.1810/isos/x86_64/ CentOS-7-x86_64-DVD-1810.iso 2018-Nov-26 00:55:20 4.2G application/octet-stream 正常版 CentOS-7-x86_64-DVD-1810.torrent 2018-Dec-03 16:03:27 85.9K application/x-bittorrent CentOS-7-x86_64-Every…

用户系统加密--Java

一个基本的用户系统如下&#xff1a; # 定义用户类 class User:def __init__(self, name, password):self.name nameself.password password# 创建用户列表 users []# 添加新用户 def add_user(name, password):new_user User(name, password)users.append(new_user)print…

洛谷-P1596 [USACO10OCT] Lake Counting S

P1596 [USACO10OCT] Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; const int N110; int m,n; char g[N][N]; bool st[N][N]; //走/没走 int dx[] {-1,-1,-1,0,0,1,1,1}; //八联通 int dy[] {-1,0,1,1,-1,1…

LDF、DBC、BIN、HEX、S19、BLF、ARXML、slx等

文章目录 如题 如题 LDF是LIN报文格式文件&#xff0c;把这个直接拖到软件里面&#xff0c;可以发报文和接收报文 DBC是CAN报文格式文件&#xff0c;把这个直接拖到软件里面&#xff0c;可以发报文和接收报文 BIN文件烧录在BOOT里面&#xff08;stm32&#xff09;&#xff0c…

【前端】解决前端图表大数据配色难题:利用HSL动态生成颜色方案

解决前端图表大数据配色难题&#xff1a;利用HSL动态生成颜色方案 在数据可视化项目中&#xff0c;尤其是当需要绘制包含大量数据点的图表时&#xff0c;一个常见的挑战是如何为每个数据点分配一个独特而又视觉上容易区分的颜色。使用固定的颜色列表可能在数据点数量超过列表限…

CTF-SHOW SSRF

web351 存在一个flag.php页面&#xff0c;访问会返回不是本地用户的消息&#xff0c;那肯定是要让我们以本地用户去访问127.0.0.1/flag.php web352 代码中先判断是否为HTTP或https协议&#xff0c;之后判断我们传入的url中是否含有localhost和127.0.0&#xff0c;如果没有则…