Scala之集合(3)

news2024/11/24 9:34:21

bcb8b4afbca6201eecd3658417092fbe.png

 

目录

 

WordCount案例:

需求分析与步骤:

拆分:

聚合:

格式转化:

方法1:

方法2:

排序:

方法1:

方法2:

取top3:

整体化简后的代码:

WordCoount案例升级:

给定数据:

方法1:

方法2:

方法3:

并行集合:


 

WordCount案例:

需求分析与步骤:

b7dfb4b2c412429485fdd52580d5da02.png

拆分:

val list: List[String] = stringList.flatMap((s) => {
    s.split(" ")
    })

聚合:

聚合过程较为繁琐,分为以下几步:

(1)先将切割后的List集合转变成二元组并且value设置为1

    val tuples: List[(String, Int)] = list.map(s => (s, 1))

(2)对现在的二元组进行分组(相同的key)

    val map: Map[String, List[(String, Int)]] = tuples.groupBy(tuple => tuple._1)

格式转化:

方法1:

通过map映射映射成我们需要的形式

    val map1: Map[String, Int] = map.map(tuple => (tuple._1, tuple._2.size))

方法2:

方法2使用的是value特定的函数

val map2: Map[String, Int] = map.mapValues(value => value.size)

排序:

方法1:

现在的集合是Map集合,需要排序所以要转换成List再调用排序函数(sortBy方法)

 val list1: List[(String, Int)] = map2.toList
    val tuples1: List[(String, Int)] = list1.sortBy(map1 => map1._2).reverse

方法2:

采用sortWith方法:

    val list2: List[(String, Int)] = list1.sortWith((map1l, map2r) => map1l._2 > map2r._2)

取top3:

val list3: List[(String, Int)] = list2.take(3)

整体化简后的代码:

  val tuples1: List[(String, Int)] = stringList.map(_.split(" "))
     .flatten
     .map(s => (s, 1))
     .groupBy( _._1)
     .map(tuple => (tuple._1, tuple._2.size))
     .toList
     .sortBy(_._2)(Ordering[Int].reverse)
     .take(3)

WordCoount案例升级:

给定数据:

    val tupleList = List(("Hello Scala Spark World", 4), ("Hello Scala Spark", 3), ("Hello Scala", 2), ("Hello", 1))

与上述数据不同

方法1:

方法一就是把数据打散变成普通版数据再按照普通版数据进行操作

(1)切割与扁平化:

val list1: List[String] = list.flatMap(s => {
  s.split(" ")
})

(2)将集合中方法都改变结构变成二元组(value=1)

    val tuples: List[(String, Int)] = list1.map(s => (s, 1))

(3)按照key进行分组

    val map: Map[String, List[(String, Int)]] = tuples.groupBy(tup => tup._1)

(4)通过map进行格式转换成最终格式

    val list2: List[(String, Int)] = map.map(tp => (tp._1, tp._2.size))

(5)转换成List集合并且进行排序取前三(按业务要求)

 .toList
      .sortWith((tpl, tpr) => tpl._2 > tpr._2)
      .take(3)

总结:上述方法理解简单,但是比较消耗内存  当每个字符串的次数较大时 是非常消耗内存的,消耗时间

方法2:

方法2采取的是不打散策略,直接使用聚合的策略

(1)对集合进行切割并且转换成元组(key,value)

val list3: List[List[(String, Int)]] = tupleList.map(s => {
  val strings: Array[String] = s._1.split(" ")
  val list: List[String] = strings.toList
  list.map(list => {
    (list, s._2)
  })
}
)

(2)进行扁平化

    val flatten: List[(String, Int)] = list3.flatten

(3)进行分组

    val map1: Map[String, List[(String, Int)]] = flatten.groupBy(tuple => tuple._1)

(4)对value值进行改变  改变为我们需要的格式

    val map2: Map[String, Int] = map1.mapValues(value => value.map(tuple => tuple._2).sum)

156d5a2709f74134ab6ce0b775d79bda.png

方法3:

 方法3是在我们分组的基础之上对value进行调用归约函数,直接对value进行累加

    val map3: Map[String, Int] = map.mapValues(value => value.foldLeft(0)((res, elem) => res + elem._2))

并行集合:

并行集合涉及多线程

Scala 为了充分使用多核 CPU,提供了并行集合(有别于前面的串行集合),用于多核
环境的并行计算。
在我们日常用的main函数是单线程
在集合的后边加上.par后  变成了并行集合  使用多线程打印(同时也是乱序的)
在同一个线程内是有序的但是线程之间是无序的
集合终于终结了!!!!!
 

 

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

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

相关文章

轻量级服务器nginx:配置虚拟主机的两种方式

虚拟主机是指,在一台服务器中,通过nginx的代理,我们可以访问多个网站。区分不同的网站,可以通过端口、域名两种方式 这里写目录标题 一 端口不同区分不同的虚拟主机二 通过域名区分不同的主机名1.配置域名映射2.显示登录效果 一 …

基于ATECLOUD电源模块及单板性能自动化测试方案

一、背景介绍 客户使用直流电源、交流电源、直流负载、示波器、数据记录仪、功率分析仪、CAN卡、工控机等仪器对电源模块及单板进行功能和性能方面的测试,目前想要能够通过硬件自动化测试分析系统搭配对应仪器实现自动化测试,提升测试效率。 二、用户痛…

Linux网络——NFS共享服务

Linux网络——NFS共享服务 一、NFS共享服务1.NFS网络文件系统2.NFS 架构3.NFS 工作原理4.NFS相关配置文件及其配置作用 二、搭建NFS服务1.服务器安装 nfs-utils、rpcbind 软件包2.服务器启动nfs-utils、rpcbind服务,并设置共享目录3.服务端更改NFS配置,对…

scrapy实践-02

双师demo ptpress.com.cn/shopping/index 解析每一首歌 <ul class"f-hide"><li><a href"/song?id2037945324">芯房</a></li><li><a href"/song?id2037926385">知足</a></li><li>…

QMS-云质说质量 - 3 来料检验的九大坑,你踩过几个?

大家好&#xff0c;今天我们来讲一讲来料检验。 先重点强调一下&#xff0c;我们讨论的范围是采购大量零部件的离散制造企业&#xff0c;而不是全部类型的企业。 负责来料检验的是IQC部门。相对于整个公司的组织架构来说&#xff0c;IQC是一个很小、很小的部门。负责的事情也很…

2023找工作,怎么样才能成功跳槽面试拿到高薪呢?

前言 无论是在校招还是社会企业招聘中&#xff0c;应聘者总是要经过层层的考核才能被聘用。然而&#xff0c;在招聘时&#xff0c;设置的编程以及非技术面试问题&#xff0c;真的有必要吗&#xff1f;如此就能考核出一位开发者的真实水平&#xff1f; 说到底就是考验你的技术以…

WSL2 对外暴露端口

参考文档 一口气搞定 WSL2 的网络问题从局域网 (LAN) 访问 WSL 2 发行版通过本地网络连接到 WSL2 服务器 按照下面的操作步骤进行操作。 1. powershell 支持 sudo https://github.com/gerardog/gsudo 可以直接下载msi安装&#xff1a;https://github.com/gerardog/gsudo/rel…

excel数据分析比赛

基础 sql:百度网盘 请输入提取码 excel函数 <

Git+SpringBoot详谈

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;老茶icon &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;计…

Linux:shell+权限

索引 1.shell命令及其理解2.Linux权限及其理解1.权限基本概念2.修改权限3.权限掩码umask4.修改拥有者和所属组 3.粘滞位 1.shell命令及其理解 定义&#xff1a;命令行解释器 作用&#xff1a; 将使用者的命令翻译给kernal&#xff08;核心&#xff09;处理将核心的处理结果返…

隧道工程运维VR虚拟实操模拟训练提高学生动手能力

轨道交通作为我国国民经济的命脉和交通运输的骨干网络&#xff0c;不仅承担了绝大部分国家战略、经济物资的运输&#xff0c;还承担着客运运输职能。随着政策的重视和专业的细分&#xff0c;轨道交通的人才需求越来越大&#xff0c;但是目前传统教学面临着一些问题。 • 轨道交…

【AutoGPT】AutoGPT出现,是否意味着ChatGPT已被淘汰

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 什么是ChatGPT&#xff1f; 什么是AutoGPT&#xff1f; AutoGPT与ChatGPT的区别 AutoGPT的优势和劣势 优势 劣势 ChatGPT是否会被淘汰&#xff1f; 前言 近年来&#x…

软件测试技术那么多,我们该如何分辨?

经典软件测试技术分类&#xff1a; 测试技术是指顺利完成测试的一系列相关过程&#xff0c;有很多可能的分类方式&#xff0c;表2-1就是其中的一种。表中列出了流行的测试技术&#xff0c;也按照上面的讨论对其进行分类&#xff1a;手工测试、自动测试、静态测试、动态测试、功…

瑞芯微RK3568开发板发布邮票孔开发板

迅为 iTOP-3568邮票孔开发板采用瑞芯微RK3568处理器&#xff0c;22nm工艺制程&#xff0c;集成4核A55架构处理器和Mali G52 2EE图形处理器&#xff0c;支持4K解码和1080P编码&#xff0c;内置独立的NPU&#xff0c;可用于轻量级人工智能应用&#xff0c; 开发板采购底板核心板的…

【大数据之Hadoop】十九、MapReduce总结

MapTask工作机制 &#xff08;1&#xff09;Read阶段&#xff1a; job的提交流程&#xff1a;待读写的源数据由客户端进行切片划分&#xff0c;划分完成之后提交(切片信息、jar包、xml配置文件)给yarn&#xff0c;yarn开启MrAppMaster&#xff0c;MrAppMaster读取切片信息&…

[BJDCTF2020CTF]之Misc篇(NSSCTF)刷题记录③

CTFHub-Misc篇刷题记录①wp SUCTF-2019-MISC签到题2021-安徽省赛-misc签到RCTF-2019-Misc-draw2020-BJDCTF-Misc-藏藏藏2020-BJDCTF-Misc-签个到2020-BJDCTF-Misc-认真你就输了2020-BJDCTF-Misc-你猜我是个啥2020-BJDCTF-Misc-一叶障目2020-BJDCTF-Misc-鸡你太美2020-BJDCTF-Mi…

2023-04-24 FastDFS使用

FastDFS 1.介绍 ​ 文件上传后先是发送到tomcat应用目录下,通过shell脚本(定时执行命令)将某个目录下的文件复制到一个不会被清理的固定目录中 FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制&#xff0c;充分考虑了冗余备份、负载均衡、线性…

DNS内外网解析

AppSrv 为 chinaskills.cn 域提供域名解析&#xff1b; ~ 为 www.chinaskills.cn、download.chinaskills.cn 和 mail.chinaskills.cn 提供解析&#xff1b; ~ 启用内外网解析功能&#xff0c;当内网客户端请求解析的时候&#xff0c;解析到对应的 内部服务器地址&#x…

Windows 服务器怎么修改密码和用户名?服务器修改密码需要重启吗?

Windows 服务器怎么修改密码和用户名&#xff1f;服务器修改密码需要重启吗&#xff1f; 方法一&#xff1a;服务器管理器Windows Server 2003、2008Windows server 2012 方法二&#xff1a;命令提示符&#xff08;Windows系统通用&#xff09; 在服务器使用期间&#xff0c;为…

【14】SCI易中期刊推荐——计算机 | 人工智能(中科院2区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…