Scala之集合(3)

这篇具有很好参考价值的文章主要介绍了Scala之集合(3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Scala之集合(3)

 文章来源地址https://www.toymoban.com/news/detail-424152.html

目录

 

WordCount案例:

需求分析与步骤:

拆分:

聚合:

格式转化:

方法1:

方法2:

排序:

方法1:

方法2:

取top3:

整体化简后的代码:

WordCoount案例升级:

给定数据:

方法1:

方法2:

方法3:

并行集合:


 

WordCount案例:

需求分析与步骤:

Scala之集合(3)

拆分:

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)

Scala之集合(3)

方法3:

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

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

并行集合:

并行集合涉及多线程

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

 

到了这里,关于Scala之集合(3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++类和对象-多态->案例1计算器类、案例2制作饮品、案例3电脑组装需求分析和电脑组装具体实现

    #includeiostream using namespace std; #includestring //分别利用普通写法和多态技术实现计算器 //普通写法 class Calculator { public:     int getResult(string oper)     {         if (oper == \\\"+\\\") {             return m_Num1 + m_Num2;         }         else if (oper == \\\"-\\\") {             return m_Num

    2024年02月20日
    浏览(42)
  • WordCount 在 MapReduce上运行详细步骤

    注意:前提条件hadoop已经安装成功,并且正常启动。 1.准备好eclipse安装包,eclipse-jee-juno-linux-gtk-x86_64.tar.gz,使用SSH Secure File Transfer Client工具把安装包上传于Hadoop集群的名称节点。   2.上传Hadoop在eclipse上运行插件:haoop-eclipse-plugin-2.6.0.jar   3.更改eclipse-jee-juno-linux-gtk-x86_64.t

    2023年04月16日
    浏览(40)
  • 大数据-Storm流式框架(二)--wordcount案例

    storm软件包中lib目录下的所有jar包 WordCountTopology.java LineSpout.java SplitBolt.java CountBolt.java 右键运行WordCountTopology S torm配置项 说明 java.library.path Storm本身依赖包的路径,存在多个时用冒号分隔 storm.local.dir Storm使用的本地文件系统目录(必须存在并且storm进程可读写)。默认是sto

    2024年02月08日
    浏览(40)
  • 虚拟机+Hadoop下MapReduce的Wordcount案例

    环境:ubuntu18.04 前提:Hadoop已经搭建好 抄作业记得改标题 输入内容(可以自定义,抄作业别写一样的) yarn-site.xml 内容如下,注意第一个property要改: ·输入hadoop classpath(任意路径下均可),将返回的内容复制在第一个property的value中 *修改配置文件之后要重启hadoop(关了又

    2024年02月07日
    浏览(51)
  • 【入门Flink】- 02Flink经典案例-WordCount

    需求:统计一段文字中,每个单词出现的频次 基本思路:先逐行读入文件数据,然后将每一行文字拆分成单词;接着按照单词分组,统计每组数据的个数。 1.1.数据准备 resources目录下新建一个 input 文件夹,并在下面创建文本文件words.txt words.txt 1.2.代码编写 打印结果如下:(

    2024年02月06日
    浏览(70)
  • MapReduce入门(一)—— MapReduce概述 + WordCount案例实操

    MapReduce知识点总览图 MapReduce 是 一个分布式运算程序的编程框架 ,是用户开发“基于 Hadoop 的数据分析应用”的核心框架。 MapReduce 核心功能是 将用户编写的业务逻辑代码 和 自带默认组件 整合成一个 完整的分布式运算程序 ,并发运行在一个 Hadoop 集群上。 1.2.1 优点 1 )M

    2023年04月21日
    浏览(43)
  • Hadoop之——WordCount案例与执行本地jar包

    目录 一、WordCount代码 (一)WordCount简介 1.wordcount.txt (二)WordCount的java代码 1.WordCountMapper 2.WordCountReduce 3.WordCountDriver (三)IDEA运行结果 (四)Hadoop运行wordcount 1.在HDFS上新建一个文件目录 2.新建一个文件,并上传至该目录下 3.执行wordcount命令 4.查看运行结果 5.第二次提交报错原因 6.进

    2024年02月08日
    浏览(43)
  • YARN On Mapreduce搭建与wordCount案例实现

    YARN的基本思想是将资源管理RM,和作业调度、监控功能拆分成单独的守护进程。这个思想中拥有一个全局的资源管理器以及每个应用的MASTER,AM。每一个应用 都是单个作业或者一个DAG作业。 架构图: mapred-site.xml yarn-site.xml 配置节点分发到其他节点。 启动yarn 启动rm资源管理 访

    2023年04月24日
    浏览(35)
  • Scala集合 - Set

    水善利万物而不争,处众人之所恶,故几于道💦 一、不可变Set集合   1. 创建集合   2. 添加元素   3. 删除元素   4. 遍历集合 二、可变Set集合   1. 创建可变集合   2. 添加元素   3. 删除元素   4. 遍历集合 1. 创建集合   Set点进去是个特质,没法new,直接用伴生对象的

    2024年02月16日
    浏览(67)
  • Scala集合

    scala中的集合分为两种 ,可变集合和不可变集合, 不可变集合可以安全的并发的访问! 集合的类主要在一下两个包中 可变集合包 scala.collection.mutable 不可变集合包 scala.collection.immutable 默认的 Scala 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对

    2024年01月20日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包