用法

当RDD分区内和分区间算法不同时,使用aggregate aggregateByKey等2个方法;
但是当分区内和分区间算法相同时,便可以简化使用fold foldByKey这2个方法;

使用示例

# -*- coding: utf-8 -*-
"""
(C) rgc
All rights reserved
create time '2021/5/26 19:37'Usage:
fold 用法
foldByKey 用法
"""
# 构建spark
from 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], 1)def seq_func(x: tuple, y: int or float) -> tuple:"""计算函数:param x: 指  zeroValue 参数 也就是(2,0):param y: 指 具体的元素:return: 元素的累加,元素的个数"""return x[0] + y, x[1] + 1def comb_func(x: tuple, y: tuple) -> tuple:"""计算函数:param x: 第一个元素 类型 元祖:param y: 第二个元素 类型 元祖:return:"""return x[0] + y[0], x[1] + y[1]# fold:rdd分区内和分区间使用相同的函数进行聚合计算;
# 注意: 初始值 会参与分区内和分区间的计算;
# 所以 每个分区内的一次初始值(5) + 分区内的元素(2+1+3+4+4) + 分区间的一次初始值(5) = 24
rdd_res = rdd.map(lambda x: (x, 1)).fold((5, 0), comb_func)
print(rdd_res)  # (24,5)# foldByKey:rdd分区内 所有元素先根据key进行分组,然后分区内和分区间使用 相同的函数 对每个key对应的values 进行聚合计算;
# 注意: 初始值 只参与分区内的计算,不参与分区间计算
rdd_res = rdd.map(lambda x: (x, 1)).foldByKey((1, 0), seq_func)
print(rdd_res.collect())  # [(2, (2, 1)), (1, (2, 1)), (3, (2, 1)), (4, (3, 2))]

注意

  • fold方法和aggregate通过查看源码发现 其会调用collect()方法;而collect()方法会将Executor端每个分区所有执行的结果收集到Driver端,然后在Driver端进行分区间操作;也就是Driver端如果内存不够时 会报错;

PySpark fold foldByKey用法相关推荐

  1. pyspark dataframe基本用法

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

  2. PySpark reduce reduceByKey用法

    用法 reduce:对rdd内部 元素 进行迭代操作 reduce方法 分区内和分区间调用相同的用户给定的函数; 先在每个分区内执行完用户给定的函数后,将每个分区的结果通过collect()方法统计到 ...

  3. when-otherwise for pyspark用法

    pyspark when otherwise用法 描述:根据某一列的值,修改另一列的值 1.第一种思路,生成临时表,统计数量,用withcolumn 修改数据 2.第二种思路,调用pandas API ...

  4. kotlin之plus、copyOf、reverse、forEach、filter、map、reduce、fold等函数解释和使用

    kotlin之::函数调用.plus(增加元素).copyOf(复制数组).reverse(翻转数组).forEach(遍历数组).filter(过滤数组).map函数操作及扩展.reduce函数.f ...

  5. boost::hana::fold用法的测试程序

    boost::hana::fold用法的测试程序 实现功能 C++实现代码 实现功能 boost::hana::fold用法的测试程序 C++实现代码 #include <boost/hana/ ...

  6. boost::fusion::fold用法的测试程序

    boost::fusion::fold用法的测试程序 实现功能 C++实现代码 实现功能 boost::fusion::fold用法的测试程序 C++实现代码 #include <boost/f ...

  7. Python大数据处理扩展库pySpark用法精要

    Spark是一个开源的.通用的并行计算与分布式计算框架,其活跃度在Apache基金会所有开源项目中排第三位,最大特点是基于内存计算,适合迭代计算,兼容多种应用场景,同时还兼容Hadoop生态系统中的组 ...

  8. pyspark及Spark报错问题汇总及某些函数用法。

    此贴,主要记录本人在工作中遇到的某些报错问题,并提出自己的解决办法. 1. spark = SparkSession.builder()  TypeError: 'Builder' object is ...

  9. Pytorch nn.Fold()的简单理解与用法

    官方文档:https://pytorch.org/docs/stable/generated/torch.nn.Fold.html 这个东西基本上就是绑定Unfold使用的.实际上,在没有overla ...

  10. PySpark与GraphFrames的安装与使用

    PySpark环境搭建 配置hadoop spark访问本地文件并执行运算时,可能会遇到权限问题或是dll错误.这是因为spark需要使用到Hadoop的winutils和hadoop.dll,首先我 ...

最新文章

  1. 把canvas放在盒子内_如何将您的专业知识放在盒子中并出售
  2. 【干货】H3C如何配置VLAN-trunk 二层隔离技术?
  3. go的空接口三种用法
  4. 华为顶尖应届生最高年薪超 200 万;抖音服务器宕机;GitLab 12.1 发布 | 极客头条...
  5. html基础之背景属性
  6. 制作CDKEY:CDKEY不宜包含生效时间
  7. oracle循环视频教程,玩转Oracle入门知识和实战教程---韩顺平主讲(全31集)
  8. pb11.5调用系统打印机
  9. [CTF]ROT5/13/18/47位移密码
  10. php 养宠物,养宠物必知的十个知识,关爱宠物注重细节
  11. ABYY FineReader PDF软件最新15个人​版安装下载步骤教程
  12. Snowy小诺 前端关闭Eslint校验 yarn
  13. xcode14 Command Swift Driver Compilation Requirements emitted errors but did not ret
  14. FontAwesome for Axure字体图标合集 v4.7 — v5.8 含Free版和Pro版
  15. Lake Shore PT-100铂电阻温度传感器
  16. Verilog 实现斐波那契数列
  17. Oracle中的触发器
  18. 由legacy+MBR改为UEFI+GPT引导方式
  19. 召集令——巴布洛游牧节一日游活动开启啦!
  20. java web课设

热门文章

  1. 【转】会议中控系统在智能化会议室的应用
  2. 2020-05-26
  3. (十九)债券定价与债券收益率的计算
  4. 地铁bas服务器系统,地铁BAS系统构成及工作原理
  5. 曲苑杂坛--查看CPU配置
  6. 信息安全意识主题分享-数据安全
  7. 高性能核心板IDO-SOM3908-V1:接口丰富,性能更强,速度更快!
  8. java转盘_Java 实现大转盘抽奖
  9. jvm如何排查生产环境cpu飙高的问题
  10. C/C++ 宏参数名前加#变为字符串