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

【大数据学习 | Spark-Core】Spark的改变分区的算子

当分区由多变少时,不需要shuffle,也就是父RDD与子RDD之间是窄依赖

当分区由少变多时,是需要shuffle的。

但极端情况下(1000个分区变成1个分区),这时如果将shuffle设置为false,父子RDD是窄依赖关系,他们同处在一个Stage中,就可能造成spark程序的并行度不够,从而影响性能,如果1000个分区变成1个分区,为了使coalesce之前的操作有更好的并行度,可以将shuffle设置为true。

scala> val arr = Array(1,2,3,4,5,6,7,8,9)
arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)scala> sc.makeRDD(arr,3)
res12: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[14] at makeRDD at <console>:27scala> res12.coalesce(2)
res13: org.apache.spark.rdd.RDD[Int] = CoalescedRDD[15] at coalesce at <console>:26scala> res13.partitions.size 
res14: Int = 2scala> res12.coalesce(12)
res15: org.apache.spark.rdd.RDD[Int] = CoalescedRDD[16] at coalesce at <console>:26scala> res15.partitions.size
res16: Int = 3scala> res12.repartition(2)
res17: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[20] at repartition at <console>:26scala> res17.partitions.size
res18: Int = 2scala> res12.repartition(12)
res19: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[24] at repartition at <console>:26scala> res19.partitions.size
res20: Int = 12

repartition算子底层调用的是coalesce算子。且shuffle指定了值为true。一定会发生shuffle阶段。

repartition带有shuffle可以增加也可以减少。shuffle参数指定为true,即一定会发生shuffle阶段。

coalesce算子只能减少不能增加。由于coalesce的shuffle默认false。

例子:

如果说一个阶段中存在union或者是coalesce算子会出现rdd的分区数量变化,但是没有shuffle的情况,看最后的rdd的分区个数就是当前阶段的task任务的个数

coalesce算子并没有发生shuffle,没有划分stage。但reduceByKey产生了shuffle,所以应该划分stage。

http://www.lryc.cn/news/492306.html

相关文章:

  • Spring Boot Web应用开发:测试
  • 服务器数据恢复—光纤存储FC硬盘数据恢复案例
  • Android Binder技术概览
  • 09 —— Webpack搭建开发环境
  • 深度学习模型:卷积神经网络(CNN)
  • Flask 自定义路由转换器
  • 【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方?为什么?
  • gocv调用opencv添加中文乱码的解决方案
  • org.apache.log4j的日志记录级别和基础使用Demo
  • IC数字后端实现之大厂IC笔试真题(经典时序计算和时序分析题)
  • java centos 离线使用sherpa-onnx文字转语音TTS
  • Android 11 三方应用监听关机广播ACTION_SHUTDOWN
  • OpenHarmony-3.驱动HDF
  • 《白帽子讲Web安全》13-14章
  • CSS - CSS One-Line
  • gitlab ssh-key 绑定
  • wordpress使用Markdown语法写的文章图片显示不正常,记录一次折腾之旅
  • 从零开始学GeoServer源码(二)添加支持arcgis切片功能
  • WPF异步UI交互功能的实现方法
  • 网络基础 - 地址篇
  • # [Unity] 【游戏开发】Unity开发基础2-Unity脚本编程基础详解
  • Milvus实操
  • 35 基于单片机的精确电压表DA-AD转换
  • JDBC 设置 PostgreSQL 查询中 any(?) 的参数
  • 【11-20期】Java面试进阶:深入解析核心问题与实战案例
  • C++——内存池_2
  • 如何使用PHP爬虫获取店铺详情:一篇详尽指南
  • HTML5和CSS3新增特性
  • linux运行vue编译后的项目
  • 论文阅读:A Software Platform for Manipulating theCamera Imaging Pipeline