当前位置: 首页 > news >正文

RDD转换算子:【mapValues、mapPartitions】

文章目录

    • 1、mapValues算子
      • 功能
      • 语法
      • 举例
    • 2、mapPartitions算子
      • 功能
      • 语法
      • 举例


1、mapValues算子

功能

针对二元组KV类型的RDD对RDD中每个元素的Value进行map处理,结果放入一个新的RDD中

语法

def mapValues(self: RDD[Tuple[K,V]], f: (V) -> U) -> RDD[Tuple[K,U]]

举例

如何构造sc对象并创建RDD 参考文章:
【Spark中创建RDD的两种方式】Spark中如何获取sc对象、以及创建RDD的两种方式

rdd_kv = sc.parallelize([('laoda',11),('laoer',22),('laosan',33),('laosi',44)], numSlices=2)
# 拿到年龄,并加一
rsRdd = rdd_kv.mapValues(lambda age: age + 1)
rsRdd.foreach(lambda x:print(x))

2、mapPartitions算子

功能

对RDD每个分区的数据进行操作,将每个分区的数据进行map转换,将转换的结果放入新的RDD中

与 map 的区别:每个分区会调用一次(一个分区一个分区的数据进行处理,而map是一条一条数据进行处理),将这个分区的数据放入内存,性能比map更好,优化型算子,注意更容易出现内存溢出

语法

def mapPartitions(self: RDD[T], f: Iterable[T] -> Iterable[U] ) -> RDD[U]
  • 优点:性能快、节省外部连接资源
  • 缺点:如果单个分区的数据量较大,容易出现内存溢出
  • 场景:
    • 数据量不是特别大,需要提高性能【将整个分区的数据放入内存】
    • 需要构建外部资源时【基于每个分区构建一份资源】

举例

# 使用mapPartitions:对每个分区进行处理
def map_partition(part):rs = [i * 2 for i in part]return rs# 每个分区会调用一次:将这个分区的数据放入内存,性能比map更好,优化型算子,注意更容易出现内存溢出
map_part_rdd = input_rdd.mapPartitions(lambda part: map_partition(part))
http://www.lryc.cn/news/478303.html

相关文章:

  • 数组和指针的复杂关系
  • Linux系统I/O调优实例
  • 记录Ubuntu OS的异常
  • Vue 3 单元测试与E2E测试
  • 猫用空气净化器哪个牌子好?求除毛好、噪音小的宠物空气净化器!
  • 第十九课 Vue组件中的方法
  • 【JavaScript】V8,Nodejs 与浏览器
  • 内存马浅析
  • 聊一聊Elasticsearch的基本原理与形成机制
  • 应急救援无人车:用科技守护安全!
  • 详解Java之Spring MVC篇二
  • flutter鸿蒙next 使用 InheritedWidget 实现跨 Widget 传递状态
  • 计算机的错误计算(一百四十六)
  • 国标GB28181视频平台EasyCVR私有化视频平台工地防盗视频监控系统方案
  • CUDA系统学习之一软件堆栈架构
  • SpringBoot项目中替换指定版本的tomcat
  • 【5.10】指针算法-快慢指针将有序链表转二叉搜索树
  • 机器学习—前向传播的一般实现
  • 极狐GitLab 签约足下科技,加速国产智驾操作系统的发展与普及
  • 20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N
  • 力扣(leetcode)题目总结——哈希表篇
  • AWS RDS Oracle hit ORA-39405
  • Dinky中配置Flink集群
  • 通讯录(C 语言)
  • 对比Java和TypeScript中的服务注册和查找机制
  • Flutter 主流常用第三方库、插件收集
  • 【在Linux世界中追寻伟大的One Piece】多路转接select
  • 补一下 二维 平面直角坐标系 到三维
  • 如何学习Python编程?
  • 使用EasyExcel实现导出excel文件时生成多级下拉选