从spark WordCount demo中学习算子:map、flatMap、reduceByKey

news2024/10/4 3:28:16

文章目录

      • spark map和flatMap
      • 应用:Word Count
      • reduceByKey的用法

spark map和flatMap

val rdd = sc.parallelize(List("coffee panda","happy panda","happiest panda party"))

(1)map

rdd.map(_.split(" ")).collect
// 等价于 rdd.map(x => x.split(" ")).collect

map结果

Array[Array[String]] = Array(Array(coffee, panda), Array(happy, panda), Array(happiest, panda, party))

(2)flatMap

rdd.flatMap(_.split(" ")).collect
// 等价于 rdd.flatMap(x => x.split(" ")).collect

flatMap结果

Array[String] = Array(coffee, panda, happy, panda, happiest, panda, party)

img

应用:Word Count

val rdd = sc.parallelize(List("coffee panda","happy panda","happiest panda party"))

val wordWithCount1 = rdd.flatMap(_.split(" ")).map(x=>(x,1))
wordWithCount1.collect
// Array[(String, Int)] = Array((coffee,1), (panda,1), (happy,1), (panda,1), (happiest,1), (panda,1), (party,1))
// map(x=>(x,1)) 等价于 map((_, 1))

val wordCounts = wordWithCount1.reduceByKey((x, y) => (x + y)).collect
// Array[(String, Int)] = Array((coffee,1), (happiest,1), (panda,3), (party,1), (happy,1))
// reduceByKey((x, y) => (x + y)) 等价于 reduceByKey(_+_)
// x,y代表同一个key的两个不同value

Scala允许使用”占位符”下划线”_”来替代一个或多个参数,只要这个参数值函数定义中只出现一次,Scala编译器可以推断出参数。

reduceByKey的用法

Spark的RDD的reduceByKey是使用一个相关的函数来合并每个相同key的value值的一个算子。要求前一步传入的数据必须是(key,value)类型。

Merge the values for each key using an associative and commutative reduce function. This will also perform the merging locally on each mapper before sending results to a reducer, similarly to a “combiner” in MapReduce.

https://blog.csdn.net/dong_lxkm/article/details/103125693

31894e51c56ceb5186bc09de116bf59f4c2.jpg

我理解的reduceByKey((x, y) => (x + y)),就是对于相同key的两个value,暂且将其命名为x和y,定义这两个value之间的计算关系为求和。(注意:聚合都是两两聚合的,超过两个会报错)

reduceByKey的shuffle: 相同的key移到同一个分区

MapPartitionsRDD是预聚合(groupByKey没有这种预聚合操作,所以速度慢)

同样的,比如改成reduceByKey((x, y) => if (x > y) x else y),那么就是两个value之间取max,最终得到的结果是对于相同的多个key,只取得了它们的values中最大的那个。

// 定义映射表的数组mp
val mp:Array[(String, Int)] = Array(
    "coffee"->4, 
    "panda"->3, 
    "panda"->2, 
    "happiest"->2, 
    "panda"->1, 
    "happiest"->1)
val wordCounts = sc.parallelize(mp)
wordCounts.reduceByKey((x, y) => if (x > y) x else y).collect
// Array[(String, Int)] = Array((coffee,4), (happiest,2), (panda,3))

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

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

相关文章

windows terminal 还是 cmder ?

前景提要 windows terminal自带的没有tab命令自动补全, cmd的自动补全垃圾; cmder虽然有自动补全, 但是界面管理不太行; 而且比较复杂;只想要其UI和路径换行显示; windows terminal 应用商城或https://github.com/microsoft/terminal 下载页 https://github.com/mic…

【算法刷题】哈希表题型及方法归纳

哈希表特点 常见的三种哈希结构: 1、数组:操作简单,方便快捷,但不适于进行一些更复杂的操作。 注:适用于用set或map的情景:(1)当数组大小受限;(2&#xff0…

powerquery 连接 postgresql

1下载安装postgresql的驱动器 https://pan.baidu.com/s/1ii9PudUs9WL_clP7Ub647Q 提取码:hm6g 2 安装配置odbc 2.1打开控制面板 – 选择管理工具 2.2选择ODBC数据源(64位) 2.3控制面板搜索数据源-单击添加 选择postgresql unicode 2.4配置数据源信息 3.通过e…

einsum 理解

本文是参考以下两篇文章,再结合我自己的经验完成的: 文章一:https://zhuanlan.zhihu.com/p/358417772 文章二:https://zhuanlan.zhihu.com/p/27739282 Einsum介绍: 给定矩阵A 和矩阵B (在Python中也可以说是…

【PCB专题】PCB板卡上的UL标识是什么?

PCB行业中重要的认证之一是UL认证。在网上直接搜索UL会出现很多与防火、安全、保险相关的词汇出现。

开发板测试手册——USB 4G 模块、GPS 定位功能操作步骤详解(3)

目录 4 USB 4G 模块测试 41 4.1 网络功能测试 42 4.2 短信功能测试 43 4.3 GPS 定位功能测试 44 4.4 通话功能测试 45 4.5 测试程序编译 46 5 USB 网口模块测试 47 前 言 本指导文档适用开发环境: Windows 开发环境: Windows 7 64bit 、Windows 10 64bit Linux 开…

C语言进阶内功修炼——深度剖析数据在内存中的存储

🐒个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 目录 🚀1. 数据类型介绍 🌇1.1 类型的基本归类: 🚀2. 整形在内存中的存储 &am…

Three.js学习(一)three.js的一些基本操作

文章目录1.鼠标操作三维场景旋转、移动和缩放2.场景中添加新的三维图形3.设置材质效果4.光源效果1.鼠标操作三维场景旋转、移动和缩放 使用THREE的OrbitControls控件,可以实现鼠标控制三维图形的操作。主要是通过监听鼠标操作,控制相机的三维参数。 imp…

在线问诊呈爆发式增长,聚合支付分账如何助力互联网医疗平台加速发展?

(图源:pexels网站) 随着疫情的放开,人们问诊需求快速上涨,由于医院服务的压力激增,线上问诊成为了不少人替代去医院的有效手段,甚至于线上问诊开始出现了爆发式增长。但是在互联网医疗平台的发展过程中&am…

C语言进阶——数据的存储

目录 一. 数据类型 二. 整形在内存中的存储 1.原码、反码、补码 2.大小端 三. 浮点型在内存中的存储 存储 取出 一. 数据类型 在前面,我们已经学过一些基本的内置类型 char——字符数据类型 short——短整型 int——整形 long——长整形 long…

电路方案分析(十四)汽车电动座椅参考方案设计(H桥,高低边驱动器设计)

汽车电动座椅参考方案设计 tips:TI设计方案参考分析:TI Designs:TIDA-020008 双向和单向电机驱动器的电机驱动应用(如汽车电动座椅)的驱动和控制电路。它演示了如何驱动具有小电路板尺寸、高度可靠性和完整诊断功能的…

第二章 linux常用指令

第二章 linux常用指令一、ls指令:查看目录内容1、作用2、语法3、示例二、pwd命令:查看当前位置1、作用2、语法3、示例三、cd 指令:进入1、作用2、语法3、常用变型四、touch指令:创建文件1、作用2、语法3、常用选项五、mkdir指令&a…

12月VR大数据:兼2022全年VR硬件和应用汇总

Hello大家好,每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么?关注这里就对了。我们会统计Steam平台的用户及内容等数据,每月初准时为你推送,不要错过喔!本数据报告包含:Steam VR硬…

excel查找技巧:单个函数在区间查找中的应用解析

区间取值的问题,在我们日常工作中经常会遇到,比如:销售提成、等级评定、生产标准核定、绩效考核等等,都属于此类问题,今天就给大家介绍几种常用的方式方法,旨在丰富大家知识面的同时,也可以对函…

JavaScript 变量

文章目录JavaScript 变量JavaScript 变量JavaScript 数据类型声明(创建) JavaScript 变量一条语句,多个变量重新声明 JavaScript 变量JavaScript 算数JavaScript 变量 变量是用于存储信息的"容器"。 实例 var x5; var y6; var zx…

BlocProvider add数据流程

我们看看往bloc中添加数据流程&#xff0c;以demo为例 void _incrementCounter() {_counter;BlocProvider.of<TestBloc>(context).add(LoadTestEvent(_counter));} 我们调用了BlocProvider获取对应的Bloc &#xff0c;然后调用他的add方法 void add(Event event) {asser…

【华为重启门】华为/荣耀手机一直自动重启原因解决方案(荣耀V10)

文章目录1.问题描述2.分析原因3.解决方案4.实际操作1.问题描述 荣耀V10&#xff0c;莫名其妙的、无规律的死机重启。 一开始是重启后进入紧急备份&#xff0c;无法正常开机。 之后莫名其妙可以正常开机了&#xff0c;但是总是会重启。 2.分析原因 不搜不知道&#xff0c;一…

Maven安装及配置

1.下载 Maven – Download Apache Maven 2.安装 maven压缩包解压到一个没有中文&#xff0c;空格或其他特殊字符的文件夹内即可使用。 3.配置环境变量 1.右键此电脑->属性->高级系统设置->环境变量 2.新建系统变量MAVEN_HOME 3.编辑系统变量Path&#xff0c;添…

【源码解析】断路器Hystrix使用和工作原理

断路器Hystrix使用和工作原理 介绍 在微服务架构的分布式系统中&#xff0c;众多微服务有复杂的依赖关系&#xff0c;这些依赖在某些情况下不可避免的会出现一些请求失败。当一个依赖由于延迟高出现阻塞&#xff0c;调用该依赖的服务线程就会发生排队阻塞。如果这个时候出现大…

二叉树实现及应用(C语言模拟实现可以存放任意结点的栈、队列,二叉树遍历的递归与非递归实现,附上源码和实验报告,用了自取)

XIAN TECHNOLOGICAL UNIVERSITY 目录 课程设计报告 1绪论 2课程设计目的和内容 3算法的基本思想 1 .建立二叉树结构      建立二叉树时&#xff0c;要先明确是按哪一种遍历规则输入&#xff0c;该二叉树是按你所输入的遍历规则来建立的。本实验用的先序遍历行建树。二叉树…