PySpark fold foldByKey用法
用法
当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用法相关推荐
- pyspark dataframe基本用法
pyspark dataframe基本用法 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on F ...
- PySpark reduce reduceByKey用法
用法 reduce:对rdd内部 元素 进行迭代操作 reduce方法 分区内和分区间调用相同的用户给定的函数; 先在每个分区内执行完用户给定的函数后,将每个分区的结果通过collect()方法统计到 ...
- when-otherwise for pyspark用法
pyspark when otherwise用法 描述:根据某一列的值,修改另一列的值 1.第一种思路,生成临时表,统计数量,用withcolumn 修改数据 2.第二种思路,调用pandas API ...
- kotlin之plus、copyOf、reverse、forEach、filter、map、reduce、fold等函数解释和使用
kotlin之::函数调用.plus(增加元素).copyOf(复制数组).reverse(翻转数组).forEach(遍历数组).filter(过滤数组).map函数操作及扩展.reduce函数.f ...
- boost::hana::fold用法的测试程序
boost::hana::fold用法的测试程序 实现功能 C++实现代码 实现功能 boost::hana::fold用法的测试程序 C++实现代码 #include <boost/hana/ ...
- boost::fusion::fold用法的测试程序
boost::fusion::fold用法的测试程序 实现功能 C++实现代码 实现功能 boost::fusion::fold用法的测试程序 C++实现代码 #include <boost/f ...
- Python大数据处理扩展库pySpark用法精要
Spark是一个开源的.通用的并行计算与分布式计算框架,其活跃度在Apache基金会所有开源项目中排第三位,最大特点是基于内存计算,适合迭代计算,兼容多种应用场景,同时还兼容Hadoop生态系统中的组 ...
- pyspark及Spark报错问题汇总及某些函数用法。
此贴,主要记录本人在工作中遇到的某些报错问题,并提出自己的解决办法. 1. spark = SparkSession.builder() TypeError: 'Builder' object is ...
- Pytorch nn.Fold()的简单理解与用法
官方文档:https://pytorch.org/docs/stable/generated/torch.nn.Fold.html 这个东西基本上就是绑定Unfold使用的.实际上,在没有overla ...
- PySpark与GraphFrames的安装与使用
PySpark环境搭建 配置hadoop spark访问本地文件并执行运算时,可能会遇到权限问题或是dll错误.这是因为spark需要使用到Hadoop的winutils和hadoop.dll,首先我 ...
最新文章
- 把canvas放在盒子内_如何将您的专业知识放在盒子中并出售
- 【干货】H3C如何配置VLAN-trunk 二层隔离技术?
- go的空接口三种用法
- 华为顶尖应届生最高年薪超 200 万;抖音服务器宕机;GitLab 12.1 发布 | 极客头条...
- html基础之背景属性
- 制作CDKEY:CDKEY不宜包含生效时间
- oracle循环视频教程,玩转Oracle入门知识和实战教程---韩顺平主讲(全31集)
- pb11.5调用系统打印机
- [CTF]ROT5/13/18/47位移密码
- php 养宠物,养宠物必知的十个知识,关爱宠物注重细节
- ABYY FineReader PDF软件最新15个人​版安装下载步骤教程
- Snowy小诺 前端关闭Eslint校验 yarn
- xcode14 Command Swift Driver Compilation Requirements emitted errors but did not ret
- FontAwesome for Axure字体图标合集 v4.7 — v5.8 含Free版和Pro版
- Lake Shore PT-100铂电阻温度传感器
- Verilog 实现斐波那契数列
- Oracle中的触发器
- 由legacy+MBR改为UEFI+GPT引导方式
- 召集令——巴布洛游牧节一日游活动开启啦!
- java web课设