Spark在展开开门的这时候会展开什么样操作方式?主要就须要explain下它的继续执行方案,以

Window[row_number() windowspecdefinition(id8, id8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS row20],[id8],[id8 ASC NULLS FIRST] *(3)Sort[id8 ASC NULLS FIRST, id8 ASC NULLS FIRST],false,0 Window[sum(cast(kk9 as bigint)) windowspecdefinition(id8, kk9 ASC NULLS FIRST, specifiedwindowframe(RangeFrame, unboundedpreceding$(), currentrow$())) AS rk15L],[id8],[kk9 ASC NULLS FIRST] *(2)Sort[id8 ASC NULLS FIRST, kk9 ASC NULLS FIRST],false,0 Exchangehashpartitioning(id8,2),true,[id=29] *(1)Project[_13 AS id8, _24 AS kk9] *(1)SerializeFromObject[knownnotnull(assertnotnull(input[0, scala.Tuple2, true]))._1AS_13,knownnotnull(assertnotnull(input[0, scala.Tuple2, true]))._2AS_24]
Scan[obj2]

这个继续执行方案作为例子看就好,其实它一开始的动作是 重分区,根据 partitionBy的字段展开重分区,分区的规则就是 hashpartitioning

第二步就是Sort,排序的字段是 partitionBy的字段 orderBy的字段,里面使用的排序算法优先是Radix排序,不然就是TimSort.

第三步,就是实现的关键了,核心类就是 WindowExec.

自动草稿

主要就是调用了doExecute展开处理,在内部的操作方式流程中,主要就就是调用了MapPartitions就行了数据的处理。

假设有 (A,1),(A,2),(B,1),(A,3)分入到了同一个分区,那么排序后的结果就是 (A,1),(A,2),(A,3),(B,1)然后开始展开遍历,其中 A是一组,B又是一组,那么如何判断 (A,1),(A,2),(A,3)是同一组呢?

自动草稿

在逐行遍历的过程中,如果发现 当前行对应的group的内容和之前的group的内容不同,就说明不是同一个组了

while(nextRowAvailable

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!