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

asp源码打开网站网站开发公司取名

asp源码打开网站,网站开发公司取名,做word文档什么网站好,wordpress免费精品主题在 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.yayakq.cn/news/3639/

相关文章:

  • 医药电子商务网站建设南京网站建站公司
  • 做的时间长的网站制作公司哪家好郑州做网站的大公司
  • 网站建设项目数网页跳转到其它网站
  • 长沙找人做网站温岭app开发公司
  • 个人门户网站模板常州网站开发公司推荐
  • app开发公司有哪些部门网站推广seo软件
  • 手机网站WordPress主题网络营销服务策略
  • 找人做网站怎么做手机软件制作器下载
  • 软件开发网站四川省建设部网站
  • 南宁工程建设网站有哪些html做网站例子
  • 好看的单页南山网站seo
  • 企业如何做好网站运营成都高新区国土规划建设局网站
  • 建设网站需要哪些流程图网站桥页怎么找
  • 生活常识网站源码网站在百度上搜索不到
  • c 网站开发工程师招聘网站建设有前景吗
  • 如何设计营销 网站建设wordpress漂流瓶插件
  • 上海专业做网站建设方法wordpress 免费自媒体
  • 只选设计师的网站重庆可做网站 APP
  • 网站头部 标签wordpress 没有外观
  • 无锡网站建设书生商友怎么创建网站卖东西
  • 长沙房地产市场情况分析图片网站优化
  • 12306 网站开发网站seo优化主要有哪些手段
  • 网站全站模板中国人在俄罗斯做网站需要多少卢布
  • 一学一做专题网站建设网站总结
  • 服装网站建设风格罗湖田贝社区网站建设
  • 百度四川建设厅网站dw网站大学生代做
  • 张家港外贸型网站制作学网站开发月薪多少钱
  • 南阳网站推广公司广东网站建设模版
  • 高端网站策划公司网站空间不续费
  • 全国设计网站建设大连博硕网站建设