加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – GroupByKey在Spark中是否保留原来的顺序?

发布时间:2020-12-16 09:10:27 所属栏目:安全 来源:网络整理
导读:在Spark中,groupByKey功能将(K,V)对RDD转换为(K,Iterable V)对RDD. 但是,这个功能是否稳定?即从原始顺序保留的迭代中的顺序? 例如,如果我最初读了一个形式的文件: K1;V11K2;V21K1;V12 可能我对K1的迭代是(V12,V11)(因此不保留原始顺序),或者只能是(V11,V1
在Spark中,groupByKey功能将(K,V)对RDD转换为(K,Iterable V)对RDD.

但是,这个功能是否稳定?即从原始顺序保留的迭代中的顺序?

例如,如果我最初读了一个形式的文件:

K1;V11
K2;V21
K1;V12

可能我对K1的迭代是(V12,V11)(因此不保留原始顺序),或者只能是(V11,V12)(从而保留原始顺序)?

解决方法

不,订单不保存.火花壳中的示例:

scala> sc.parallelize(Seq(0->1,0->2),2).groupByKey.collect
res0: Array[(Int,Iterable[Int])] = Array((0,ArrayBuffer(2,1)))

顺序是时间依赖的,所以它可以在运行之间变化. (我的下一个运行中我有相反的顺序)

这里发生了什么? groupByKey通过使用HashPartitioner重新分区RDD,从而将一个密钥的所有值都结束在同一个分区中.然后它在每个分区上本地执行聚合.

重新分区也被称为“随机播放”,因为RDD的行在节点之间重新分配.随机文件从其他节点并行拉出.新的分区是按照它们到达的顺序构建的.来自最慢源的数据将位于新分区的末尾,并在groupByKey的列表末尾.

(从工作人员自己获取的数据当然是最快的,因为这里没有网络传输,这个数据被同步拉出,从而达到这个目的(至少这样看来)所以要复制我的实验,你需要至少2名Spark工作人员)

资料来源:http://apache-spark-user-list.1001560.n3.nabble.com/Is-shuffle-quot-stable-quot-td7628.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读