spark groupByKey和groupBy,groupByKey和reduceByKey的区别

2023-11-19

1. groupByKey Vs. groupBy

/**
 * 用于对pairRDD按照key进行排序
 * @author starxhong.
 */
object Test {
    def main(args: Array[String]): Unit = {
    	val sparkConf = new SparkConf().setAppName(this.getClass.getSimpleName)
        SparkSession sparkSession = SparkSession.builder().getOrCreate();
        
       	val list = List(("Tom", 8),("Bob",5),("Wade",9),("John",5),("Tom",7),("John",7))
	    val rdd = ss.sparkContext.parallelize(list)
	    pairRdd.groupByKey().mapValues(_).collect.foreach(println)
	    println()
	    pairRdd.groupByKey().mapValues(_.toList).collect.foreach(println)
	    println()
	    pairRdd.groupBy(_._1).mapValues(_).collect.foreach(println)
	    println()
	    pairRdd.groupBy(_._1).mapValues(_.toList).collect.foreach(println)
	    println()
	    pairRdd.groupBy(x => {x.toString().length}).mapValues(_.toList).collect.foreach(println)
    }
}

结果:

(Tom,CompactBuffer(8, 7))
(Wade,CompactBuffer(9))
(John,CompactBuffer(5, 7))
(Bob,CompactBuffer(5))

(Tom,List(8, 7))
(Wade,List(9))
(John,List(5, 7))
(Bob,List(5))

(Tom,CompactBuffer((Tom,8), (Tom,7)))
(Wade,CompactBuffer((Wade,9)))
(John,CompactBuffer((John,5), (John,7)))
(Bob,CompactBuffer((Bob,5)))

(Tom,List((Tom,8), (Tom,7)))
(Wade,List((Wade,9)))
(John,List((John,5), (John,7)))
(Bob,List((Bob,5)))

(7,List((Tom,8), (Bob,5), (Tom,7)))
(8,List((Wade,9), (John,5), (John,7)))

groupByKey()和Groupby(),都是返回CompactBuffer,这是一个类似ArrayBuffer的结构(An append-only buffer similar to ArrayBuffer, but more memory-efficient for small buffers),区别是groupByKey()的返回(key,CompactBuffer(value1, value2, …)),groupBy()返回(key,CompactBuffer((key,value1), (key,value2), …)结构。
groupByKey是按Key进行分组,所以作用对象必须是PairRDD型的。而GroupBy分组规则需要我们自己设定,groupBy的参数可以是一个函数,该函数的返回值将作为Key。

2. groupByKey Vs. reduceByKey

reduceByKey比groupBykey效率更高,主要方式是reduceByKey先worker内reduce一次,再按key进行group,而groupByKey是先group,再reduce。
在这里插入图片描述在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spark groupByKey和groupBy,groupByKey和reduceByKey的区别 的相关文章

随机推荐

  • 线程封闭概念

    线程封闭概念 为什么要有线程封闭这个概念呢 多线程中访问共享可变数据时 涉及到线程间数据同步的问题 并不是所有时候都需要共享数据 所以线程封闭概念就出来了 在Java中线程封闭该怎么做呢 可以通过两个方法来做 ThreadLocal 1 T
  • 34 openEuler使用LVM管理硬盘-创建并挂载文件系统

    文章目录 34 openEuler使用LVM管理硬盘 创建并挂载文件系统 34 1 创建文件系统 34 2 手动挂载文件系统 34 3 自动挂载文件系统 34 openEuler使用LVM管理硬盘 创建并挂载文件系统 在创建完逻辑卷之后 需
  • android代码获取当前package的de目录

    获取de目录首先要获取DE CONTEXT Context deContext getApplicationContext createDeviceProtectedStorageContext 然后通过DE CONTEXT获取de目录 S
  • SpringBoot + MyBatis-plus + Druid 实现简单增删查改、动态条件查询和分页功能

    本文主要讲解 SpringBoot集成Mybatis plus 数据库连接池使用alibaba的druid 实现简单增删查改 动态条件查询和分页功能 项目整体结构 项目添加相关框架依赖 pom xml
  • 辐射强度、辐亮度、辐照度——一文搞定

    先写定义 上图是从网上看到的并重写的 其中我们最容易混淆的就是辐射强度 辐亮度 辐照度的关系 如果我们没有接触专业领域 那么我们可能接触最多的就是辐射强度 而这种现象是不对的 因为我们一般考虑的均为这光好强呀 照得屋里特别亮 这里的光亮 我
  • untiy的纹理格式介绍

    Desktop RGB Compressed DXT1 压缩的RGB纹理 这是最常见的漫反射纹理格式 4位 像素 32 KB 256x256 RGBA Compressed DXT5 压缩的RGBA纹理 这是漫反射和高光控制纹理的主要格式
  • 如何区分网线是几类的_怎么看网线是几类?

    我来回答下本行业的问题 我是做智能化弱电的 在弱电监控系统中网线是连接弱电局域网中必不可少的材料 也是综合布线系统中最常用的一种传输材质 网线是由4对线8芯组成 每芯都有颜色区分 用于数据传输 网线的分类 网线按照性能划分 可以分为五类线
  • 基于sklearn的简单分类器

    基于sklearn的简单分类器 输入 输出 3 1 0 2 5 1 1 8 1 6 4 0 5 2 0 3 5 1 4 7 1 4 1 0 7 5 已知部分输入和部分输出求当输入为7 5时输出为多少 我们观察上面的规律不难发现 当输入的第一
  • react 使用 scss

    react 使用 scss 日常记录开发中遇到的坑 1 使用 npm install sass loader node sass S 进行安装 2 在页面中直接使用 有时候可以 有时候不行 原因 我个人觉得安装的两个插件本版兼容问题 nod
  • vue,vue-cli和@vue/cli是什么关系?有什么区别?

    vue是构建用户界面的渐进式JavaScript 框架 vue cli是vue的一个官方脚手架工具 快速工程化命令工具 用来帮助程序员们快速搭建基于vue框架的开发环境 vue有很多脚手架工具 vue cli只是其中一种 侧重于单页面应用
  • pytorch 取对角线元素/矩阵对角线元素置0

    pytorch 取对角线元素 矩阵对角线元素置0 使用 torch diag 取对角线元素 使用 torch diag embed 恢复维度 import torch a torch randn 3 3 print a tensor 0 7
  • 在Echarts中的tooltip上添加点击按钮

    需求 在Echarts的tooltips中添加点击按钮并可以鼠标悬停点击该按钮 功能实现 在option中的tooltip添加enterable true的属性 表示鼠标可以移入tooltip中 再在formatter中添加
  • 从Java到区块链:如何成为区块链开发人员

    最近这些天 区块链是每个开发人员的谈资 来自各个领域的许多软件开发商现在正试图进入区块链市场 我们与Mobilunity的区块链软件开发人员Eugene Kyselev 讨论了他是如何走出区块链开发方面的第一步的 希望对大家有所帮助 JAX
  • 上海链节科技:通证经济的到来,拉开了去中心化协作序幕

    国家在肯定扶持区块链技术的同时 也针对币圈进行了强监管 区块链行业经历疯狂到沉默 开始回归理性 重新审视技术带来的变革 技术是无罪的 分布式存储 去中心化 智能合约 加密 挖矿等种种技术或设计理念 都是为了保障信任 实现价值传递 降低交易成
  • Dockerfile: ENTRYPOINT vs CMD

    Dockerfile ENTRYPOINT和CMD的区别 dongmao zhang software engineer 132 人赞同了该文章 翻译 Dockerfile ENTRYPOINT vs CMD 在我们查阅Dockerfile
  • ANDROID

    1 环境构建 2 模拟测试 3 Activity 4android中的资源 5 UI 6 各种控件
  • 剑指offer第二版面试题20:表示数值的字符串(java)

    题目描述 请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值 但是 12e 1a3 14 1 2 3 5 和 12e 4 3 都不是 分析 1 在数值之前
  • ubuntu18.04上安装TensorFlow2.0

    推特上几乎每天都有关于深度学习中Keras TensorFlow哪个个才是最好的框架的口水战 2019年后 这将不在是个问题 2019年初 tf keras 子模块已引入TensorFlow v1 10 0中 现在 在TensorFlow
  • 线性代数——二次型

    一 通过矩阵研究二次方程 二次型的定义 把含有n个变量的二次齐次函数或方程称为二次型 例如 二次型可以用矩阵来表示 可以表示为 更一般的情况 可以表示为 令 则上式表示为 这就是我们常见的二次型表示方式 在 Linear Algebra a
  • spark groupByKey和groupBy,groupByKey和reduceByKey的区别

    1 groupByKey Vs groupBy 用于对pairRDD按照key进行排序 author starxhong object Test def main args Array String Unit val sparkConf n