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

asp源码打开网站建筑工程网络计划方法

asp源码打开网站,建筑工程网络计划方法,2017做网站怎么赚钱,织梦php网站模板修改在 Spark 的 RDD 中#xff0c;sortBy 是一个排序算子#xff0c;虽然它在某些场景下可能看起来是分区内排序#xff0c;但实际上在需要全局排序时会触发 Shuffle。这里我们分析其底层逻辑#xff0c;结合源码和原理来解释为什么会有 Shuffle 的发生。 1. 为什么 sortBy 会…在 Spark 的 RDD 中sortBy 是一个排序算子虽然它在某些场景下可能看起来是分区内排序但实际上在需要全局排序时会触发 Shuffle。这里我们分析其底层逻辑结合源码和原理来解释为什么会有 Shuffle 的发生。 1. 为什么 sortBy 会触发 Shuffle 关键点 1全局有序性要求 sortBy 并非单纯的分区内排序。它的目标是按照用户指定的键对整个 RDD 的数据进行排序这种操作需要保证全局顺序。为实现这一点必须 对数据进行 重新分区Repartition确保每个分区中的数据按照全局范围内的排序键正确分布每个分区内部再完成排序。 这些步骤不可避免地引入了 Shuffle因为数据需要从一个分区转移到另一个分区以保证全局有序性。 关键点 2底层调用 repartitionAndSortWithinPartitions sortBy 的底层实现会调用 repartitionAndSortWithinPartitions 方法 this.keyBy(f).repartitionAndSortWithinPartitions(new RangePartitioner(numPartitions, this, ascending))(ordInverse).valueskeyBy(f) 将数据转化为 (key, value) 格式key 是排序的关键字value 是原始数据。 RangePartitioner 使用 RangePartitioner 将数据根据排序键重新分区这一步需要 Shuffle。 repartitionAndSortWithinPartitions 先 Shuffle 数据以保证每个分区内的 key 是按范围划分的然后对每个分区内的数据进行排序。 Shuffle 的触发 当目标分区数量与当前分区数量不一致时用户指定分区数或默认分区数会触发 Shuffle即使目标分区数一致只要需要保证全局有序也需要重新分布数据来确保各分区内数据按键范围划分。 2. Shuffle 的作用 全局排序分区间重新分布数据确保所有分区的排序键范围是连续的。负载均衡通过 RangePartitioner 分布数据避免某些分区过大或过小的问题。分区内排序确保每个分区内部数据按键排序。 3. 源码分析 repartitionAndSortWithinPartitions 的核心逻辑如下 def repartitionAndSortWithinPartitions(partitioner: Partitioner)(implicit ord: Ordering[K]): RDD[(K, V)] withScope {val shuffled new ShuffledRDD[K, V, V](this, partitioner)shuffled.setKeyOrdering(ord)new MapPartitionsRDD(shuffled, (context, pid, iter) {val sorter new ExternalSorter[K, V, V](context, Some(partitioner), Some(ord))sorter.insertAll(iter)context.taskMetrics().incMemoryBytesSpilled(sorter.memoryBytesSpilled)context.taskMetrics().incDiskBytesSpilled(sorter.diskBytesSpilled)context.taskMetrics().incPeakExecutionMemory(sorter.peakMemoryUsedBytes)sorter.iterator}) }ShuffledRDD 触发 Shuffle将数据根据分区器重新分布。 ExternalSorter 对每个分区内的数据进行排序如果数据超出内存会使用磁盘作为临时存储。 4. 举例说明 Shuffle 的发生 sortBy 的行为取决于传递的参数。为了实现分区内排序你需要明确控制 sortBy 的参数设置。如果不显式指定目标分区数numPartitions 参数sortBy 默认不会触发 Shuffle因此只会在分区内排序。 例子 1带 Shuffle 的全局排序 val rdd sc.parallelize(Seq(5, 2, 4, 3, 1), numSlices 2) val sortedRdd rdd.sortBy(x x, ascending true, numPartitions 3)// 指定目标分区数 println(sortedRdd.collect().mkString(, ))初始数据分区 分区 1[5, 2]分区 2[4, 3, 1]重新分区和排序后 分区 1[1, 2]分区 2[3, 4]分区 3[5]Shuffle 触发原因 数据必须重新分布确保分区键范围[1-2], [3-4], [5]。特点 触发 Shuffle 操作数据按照 RangePartitioner 进行分区。 每个分区内局部排序后实现全局排序。 例子 2分区内排序无 Shuffle val rdd sc.parallelize(Seq(5, 2, 4, 3, 1), numSlices 2) // 两个分区 // 如果只需要分区内排序mapPartitions 提供了无 Shuffle 的选择。 val sorted rdd.mapPartitions(partition partition.toList.sorted.iterator) sorted.collect().foreach(println)初始数据分区 分区 1[5, 2]分区 2[4, 3, 1]排序后 分区 1[2, 5]分区 2[1, 3, 4]无 Shuffle 原因 数据仅在分区内排序分区间顺序无全局保证。 5. 总结 sortBy 在需要全局排序时触发 Shuffle这是为了重新分区以确保分区范围和分区内排序。如果只需要分区内排序mapPartitions 提供了无 Shuffle 的选择。 注意事项 全局排序带来的 Shuffle 会显著增加网络传输和计算成本。如无必要尽量避免全局排序优先考虑局部排序或 Top-N 算法以优化性能。
http://www.hkea.cn/news/14476912/

相关文章:

  • 网站盗取图片可以做砍价链接的网站
  • 网站开发要用哪些语言开发网站建设违法行为
  • 刚做的网站怎么在百度上能搜到wordpress 后台实现轮播图
  • 合肥最好的网站建设公司排名关于用户网站建设的论文
  • 长沙哪些公司做网站西安网页设计培训班
  • 网站建设的需求怎么写网站制作需要哪些
  • 四川省住房与建设厅网站首页用divid做网站代码
  • 做网站要准备的资料金融投资公司网站模板
  • 高端的网站设计公司做网站需要学啥
  • 江门移动网站建设公司网站 购买
  • 微软雅黑做网站高级网站开发技术使用什么语言
  • 两个网站用一个空间网站关于我们怎么做
  • 个人网站可以做资讯小说类wordpress 导入幻灯片
  • 网页设计作业个人网站西北苗木网陕西泽基生态建设有限公司网站
  • 企业门户网站建设市场木材模板.网站
  • 弹性盒子做微网站大连线上教学
  • 网站怎样做百度推广计划南昌网站开发公司
  • 江苏建站系统网址软件下载
  • 如何在国外网站做翻译兼职织梦多语言网站
  • 怎么去创立一个网站怎么自己编写网站
  • 网站推广员怎么做国外购物网站怎么做
  • 我谁知道在哪里可以找人帮忙做网站局门户网站建设的目标
  • 开源网站搭建官网建设目的
  • 辽宁注册公司网站企业调查问卷
  • 公司网站备案网站名称有什么用江西省建设网站公司
  • 织梦网站后台苏州网站建设托管
  • 模板网站多钱赣州工作室
  • 郑州建材公司网站建设怎样设计一个网页
  • 下列关于网站开发网页上传网站运营工作具体做啥
  • 建立网站条件设计师常用的图片网站