用法

  • reduce:对rdd内部 元素 进行迭代操作
    reduce方法 分区内和分区间调用相同的用户给定的函数;
    先在每个分区内执行完用户给定的函数后,将每个分区的结果通过collect()方法统计到Driver端;然后在Driver端 通过用户给定的函数进行分区间操作;
    其实:reduce方法调用的元素间的迭代操作就是用的 python自带的 functools reduce方法

  • reduceByKey:先根据key对每个分区内的数据进行分组,然后调用用户指定的函数对每个key的values进行 迭代操作; 然后分区间再进行一次操作;
    内部调用的就是 combineByKey方法;
  • combineByKey和aggregateByKey区别
    两者类似,都是在分区内和分区间执行函数;
    只是combineByKey没有默认值,这时 如add时先获取第一个数据,由于没有其他数据进行相加,则直接返回 自己 add(1,None) ⇒ 1
    而aggregateByKey由于有默认值 假设为 2; 则add(1,2) ⇒ 3

示例代码

# -*- coding: utf-8 -*-
"""
(C) rgc
All rights reserved
create time '2021/5/30 21:01'Usage:"""
# 构建spark
from functools import reducefrom pyspark.conf import SparkConf
from pyspark.context import SparkContextconf = SparkConf()
# 使用本地模式;且 executor设置为1个方便debug
conf.setMaster('local[1]').setAppName('rgc')
sc = SparkContext(conf=conf)rdd = sc.parallelize([2, 1, 3, 4, 4], 2)
_list = [[3, 5], [2, 3], [3, 6]]
rdd1 = sc.parallelize(_list, 2)def reduce_func(x, y):"""reduce累积:param x: 第一个数据:param y: 第二个数据:return: ((((2*1)*3)*4)*4)"""return x * y# reduce方法 分区内和分区间调用相同的用户给定的函数;
# 先在每个分区内执行完用户给定的函数后,将每个分区的结果通过collect()方法统计到Driver端;然后在Driver端 通过用户给定的函数进行分区间操作;
# 其实:reduce方法调用的元素间的迭代操作就是用的  python自带的 functools reduce方法
rdd_res = rdd.reduce(reduce_func)
print(rdd_res)  # 96
# 通过spark.reduce实现list中每个值向上层展开;
print(rdd1.reduce(lambda x, y: x + y))  # [3, 5, 2, 3, 3, 6]
# 通过functools.reduce实现list中每个值向上层展开;
print(reduce(lambda x, y: x + y, _list))  # [3, 5, 2, 3, 3, 6]# reduceByKey:先根据key对每个分区内的数据进行分组,然后调用用户指定的函数对每个key的values进行 操作; 然后分区间的结果再进行一次操作;
# 其实:调用的就是 combineByKey
rdd_res1 = rdd.map(lambda x: (x, 2)).reduceByKey(reduce_func)
print(rdd_res1.collect())  # [(2, 2), (4, 4), (1, 2), (3, 2)]

总结

  • 调用pyspark的reduce可以当做调用python自带的functools.reduce只是可以在多机器分布式的运行而已;
  • pyspark.reduce是行动算子(也就是执行到reduce代码才实际执行RDD流程),因为内部包含了collect()方法
  • reduceByKey分区内先进行了一次操作,所以有效的减少了落盘的数据量(shuffle操作),从而在分区间操作时效率高一些;

PySpark reduce reduceByKey用法相关推荐

  1. pyspark dataframe基本用法

    pyspark dataframe基本用法 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on F ...

  2. java8 stream reduce 方法用法 java stream reduce 方法使用方法

    java8 stream reduce 方法用法 java stream reduce 方法使用方法 一.背景 在使用Stream的reduce方法时,发现该方法有 3个重载方法,分别是: 一个参数. ...

  3. es6中reduce的用法_25个你不得不知道的数组reduce高级用法

    背景 距离上一篇技术文章<1.5万字概括ES6全部特性>发布到现在,已经有整整4个月没有输出过一篇技术文章了.哈哈,不是不想写,而是实在太忙,这段时间每天不是上班就是加班,完全没有自己的时 ...

  4. java reduce.mdn_编程语言你不得不知道的数组reduce高级用法

    背景 距离上一篇技术文章<1.5万字概括ES6全部特性>发布到现在,已经有整整4个月没有输出过一篇技术文章了.哈哈,不是不想写,而是实在太忙,这段时间每天不是上班就是加班,完全没有自己的时 ...

  5. 20个你不得不知道的数组reduce高级用法

    目录 1 背景 2 高级用法 3 兼容和性能 4 结语 1 背景 reduce 作为ES5新增的常规数组方法之一,对比 forEach .filter 和 map,在实际使用上好像有些被忽略,发现身边 ...

  6. js中的reduce的用法

    reduce的用法 reduce的介绍 reduce的基本用法 reduce的介绍 1.reduce和迭代方法(map.fliter.forEach)一样,会遍历数组:reduce()方法会遍历数组中 ...

  7. JS中reduce的用法

    JS中reduce的用法 前言 语法 举例 reduce的应用 总结 前言 reduce() 方法对数组中的每个元素执行一个由您提供的reduce函数(升序执行),将其结果汇总为单个返回值.reduc ...

  8. python map lambda 分割字符串_python之lambda、filter、map、reduce的用法说明(基于python2)...

    python中有一些非常有趣的函数,面试的时候可能会遇到.今天也来总结一下,不过该类的网上资料也相当多,也没多少干货,只是习惯性将一些容易遗忘的功能进行整理. lambda 为关键字.filter,m ...

  9. python3函数中lambda/filter/map/reduce的用法

    lambda/filter/map/reduce这几个函数面试中很肯定会用到,本篇主要介绍这几个函数的用法. 1.lambda 匿名函数,用法如下: # lambada 参数,参数,参数 : 返回的表 ...

最新文章

  1. Json 动态获取key 或者获取value
  2. springboot实战 获取spring上下文的4种方式
  3. mapreduce原理
  4. HLS-搭建Nginx流媒体服务器
  5. JSTL 及 tablibs 的简单介绍和配置方法
  6. Survivor区详解
  7. mysql更新一条语句_MySQL一条更新语句是如何执行的
  8. neo4j 增 create
  9. 3.7.1 - Strings
  10. 树莓派GPIO点亮第一个led
  11. python setuptools 打包 发布
  12. 解析VPU:智能视频处理加速器
  13. matlab高斯消去法解线性方程组,高斯消元法—求解线性方程组与实例分析应用.pdf...
  14. 「2019.7.22 考试」AC和WA0一步之遥
  15. 【Fate/kaleid liner 魔法少女☆伊莉雅】系列中实践的、新世代的动画摄影工作流...
  16. 在电脑上构建自我意识
  17. 了解下STRAIGHT_JOIN
  18. 《遥远的救世主》(摘录)
  19. VS无法下载,提示无法连接到网络
  20. 可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking

热门文章

  1. 标号法(label-setting algorithm)求解带时间窗的最短路问题(ESPPRC)
  2. 160_zigbee协调器_一种判断数据包有没有拿对的方法【掐头去尾发,拿头指针、尾指针去判断】
  3. 宏文件下载_用一个宏文件,就一个轻松把SolidWorks的英文特征翻译成中文
  4. 微信点餐系统html,微信点餐系统,一种新型的点餐方式
  5. HTML+CSS+JS大作业:网站设计——家具装修公司(12页 bootstrap, 响应式)
  6. php notice 性能,【OneAPM出品】解决Notice错误性能提升
  7. 1-8 (4). RabbitMQ高级特性-消费端ACK
  8. 什么是VTP?(简单介绍)
  9. 理解假设检验: 统计学意义上的显著性水平 (Alpha) 和P值
  10. 情人节相关的公众号图文这样排版,看过的都说美!