Spark中的groupByKey是否保留原始顺序?

 len1111_744 发布于 2023-01-09 13:30

在Spark中,groupByKey函数将一(K,V)对RDD转换为一(K,Iterable)对RDD.

然而,这个功能稳定吗?ie是从原始顺序保留的可迭代顺序?

例如,如果我最初读取表单的文件:

K1;V11
K2;V21
K1;V12

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

1 个回答
  • 不,订单不会保留.示例spark-shell:

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

    顺序取决于时间,因此它可以在运行之间变化.(我下一次跑步时的顺序相反.)

    这里发生了什么?groupByKey通过使用a重新分区RDD来工作HashPartitioner,以便键的所有值在同一分区中结束.然后它在每个分区上本地执行聚合.

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

    (从工作人员本身提取的数据当然是最快的.因为这里没有涉及网络传输,所以这些数据被同步拉出,因此按顺序到达.(至少看来.)所以为了复制我的实验,你需要在至少2名火花工人.)

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

    2023-01-09 13:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有