Scala 复杂分词求和(二元组)
1 package chapter07
2
3 object Test18_ComplexWordCount {
4 def main(args: Array[String]): Unit = {
5 val tupleList: List[(String, Int)] = List(
6 ("hello", 1),
7 ("hello world", 2),
8 ("hello scala", 3),
9 ("hello spark from scala", 1),
10 ("hello flink from scala", 2)
11 )
12
13 // 思路一:直接展开为普通版本
14 val newStringList: List[String] = tupleList.map(
15 kv => {
16 (kv._1.trim + " ") * kv._2
17 }
18 )
19 println(newStringList)
20
21 // 接下来操作与普通版本完全一致
22 val wordCountList: List[(String, Int)] = newStringList
23 .flatMap(_.split(" ")) // 空格分词
24 .groupBy( word => word ) // 按照单词分组
25 .map( kv => (kv._1, kv._2.size) ) // 统计出每个单词的个数
26 .toList
27 .sortBy(_._2)(Ordering[Int].reverse)
28 .take(3)
29
30 println(wordCountList)
31
32 println("================================")
33
34 // 思路二:直接基于预统计的结果进行转换
35 // 1. 将字符串打散为单词,并结合对应的个数包装成二元组List((hello,1), (hello,2), (world,2), (hello,3), (scala,3), (
36 val preCountList: List[(String, Int)] = tupleList.flatMap(
37 tuple => {
38 val strings: Array[String] = tuple._1.split(" ")
39 strings.map( word => (word, tuple._2) )
40 }
41 )
42 println(preCountList)
43
44 // 2. 对二元组按照单词进行分组
45 val preCountMap: Map[String, List[(String, Int)]] = preCountList.groupBy( _._1 )
46 println(preCountMap)
47
48 // 3. 叠加每个单词预统计的个数值
49 val countMap: Map[String, Int] = preCountMap.mapValues(
50 tupleList => tupleList.map(_._2).sum
51 )
52 println(countMap)
53
54 // 4. 转换成list,排序取前3
55 val countList = countMap.toList
56 .sortWith(_._2 > _._2)
57 .take(3)
58 println(countList)
59 }
60 }
("hello", 1), 说明“hello”字符串已知出现了两次!
Scala 复杂分词求和(二元组)的更多相关文章
- Lucene.Net 2.3.1开发介绍 —— 二、分词(二)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(二) 1.2.分词的过程 1.2.1.分词器工作的过程 内置的分词器效果都不好,那怎么办?只能自己写了!在写之前当然是要先看看内置的分词 ...
- 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 C.二元-K个二元组最小值和最大-优先队列+贪心(思维)
链接:https://ac.nowcoder.com/acm/contest/558/C来源:牛客网 小猫在研究二元组. 小猫在研究最大值. 给定N个二元组(a1,b1),(a2,b2),…,(aN, ...
- 读取二元组列表,打印目录的层级结构-----C++算法实现
要求是--某个文件中存储了一个最多3层的层级结构,其中每个元素都是一个自然数,它的存储方法是一个二元组的列表,每个二元组的形式为:(元素,父元素).现在希望能够通过读取该二元组列表,打印出目录的层级结 ...
- Java实现蓝桥杯互补二元组
分三处 1.当差值为0并且只有一个二元组就不管他 2.当差值为0并且二元组个数>=1加上他并减去它本身 3.当差值为存在并且不为0时直接加上他 因为都计算了两次,所以最后ans/2 用了map的 ...
- Scala详解---------数组、元组、映射
一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初始值的数组,无需new关键字 Scala声明数组时,需要带有Arr ...
- Scala具体解释---------数组、元组、映射
一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初始值的数组,无需newkeyword Scala声明数组时.须要带 ...
- Scala学习笔记之二--基本数据类型
前言 本篇主要讲Scala的基本数据类型,更多教程请参考:Scala教程 基本数据类型 Scala一共提供了9中数据类型,Scala的基本数据类型与java中的基本数据类型是一一对应的,这是Scala ...
- Swift(二,元组,可选类型,类型转化)
一,首先,元组是Swift中特有的,OC中没有元组相关类型,具体怎么用,看下面的例子吧 //1.使用元组来定义一组数据 let infoTuple = (,1.8) let nameTuple = i ...
- [ES]elasticsearch章5 ES的分词(二)
Elasticsearch 中文搜索时遇到几个问题: 当搜索关键词如:“人民币”时,如果分词将“人民币”分成“人”,“民”,“币”三个单字,那么搜索该关键词会匹配到很多包含该单字的无关内容,但是如果将 ...
- Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
1:Scala之函数式编程学习笔记: :Scala函数式编程学习: 1.1:Scala定义一个简单的类,包含field以及方法,创建类的对象,并且调用其方法: class User { private ...
随机推荐
- 2021-07-21 vue插槽
说明 为什么要有插槽? 是为了方便优雅地在父组件中向子组件传递向子组件传递dom结构. 代码处理 子组件 该子组件的组件名为ChildComponent: <template> <d ...
- 【小记事】如何设置vscode代码格式化时不要自动换行
最近一格式化就给我分好多行,好气哦(`ヘ´)=3 在setting.json中添加如下代码: "vetur.format.defaultFormatter.html": " ...
- linux7/8版本的docker-ce安装(2022/5/27亲测可行)
centos7 # 先配阿里源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl - ...
- C程序分别实现下列字符阵列的输出
C程序分别实现下列字符阵列的输出:(https://zhuanlan.zhihu.com/p/443989560 可以参考这个博主写的) 1,左下三角形(代码) 1 #include <s ...
- Visual Studio部署C++环境下OpenCV库
本文介绍在Visual Studio 2022中配置.编译C++计算机视觉库OpenCV的方法. 1 OpenCV库配置 首先,我们进行OpenCV库的下载与安装.作为一个开源的库,我们直接在 ...
- centos解决 pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
一.下载 openssl 编译安装 openssl 官方下载地址:https://www.openssl.org/source/ wget https://github.com/openssl/ope ...
- iVCam 可以当电脑的摄像头 同一个wifi
iVCam 可以当电脑的摄像头 同一个wifi
- 修改校准debain/manjaro的时间时钟
一次重启后发现时间竟然从上午变成了晚上!要问,我是怎么发现在的我就是发现上午的时候我的屏幕夜灯突然出现了 使用命令 sudo rm -f /etc/localtime删除本地时间文件 sudo cp ...
- 关于debian11无法安装星火商店的解决方法
#!/bin/bash if [ "$(id -u)" != "0" ] then echo "请确保你使用root权限启动此脚本" exi ...
- 芯片公司Dialog产品调研简报
一 公司简介: Dialog半导体有限公司的总部位于伦敦,设有一个全球销售.研发和营销部.2013年,公司实现了9.10亿美元的营业收入,是欧洲增长速度最快的公共半导体公司之一. 二 芯片型号: ...