当前位置: 首页 > 知识库问答 >
问题:

Apache Spark如何实现洗牌阶段?

汤玉宸
2023-03-14
rddB = rddA.map1.groupByKey();
rddX = rddB.map2.map3.saveAsTextFile();
rddY = rddB.map4.map5.saveAsTextFile();

它是否执行map1,然后按键分区,并将中间数据保存在磁盘(内存)上?

然后读取中间文件2次,一次用于map2 map3分支,第二次用于map4 map5,而不再次计算rddB,即使我们没有在rddB上执行隐式缓存?

共有1个答案

诸葛亮
2023-03-14

不,Spark的行为方式略有不同。首先,Spark在遇到您所写的行时实际上并不执行操作,但它创建了要执行的操作的DAG以获得给定的RDD或结果。事实上,Spark的操作分为两大类:转换和动作;它只在遇到操作时执行它们。

此外,Spark只有在您告诉它这样做时才html" target="_blank">存储中间结果,即在RDD上调用persistcache时。如果不这样做,它将执行所有的操作以获得给定的结果,直到DAG的根(即从文件中读取结果)。

前面的说法并不是真的。事实上,手册上说这里

Spark还在shuffle操作(例如reduceByKey)中自动保存一些中间数据,即使用户不调用persisted。这样做是为了避免重新计算整个输入,如果一个节点在洗牌期间失败。我们仍然建议用户如果计划重用RDD的话,就调用persist。

 类似资料:
  • 本文向大家介绍C#实现洗牌游戏实例,包括了C#实现洗牌游戏实例的使用技巧和注意事项,需要的朋友参考一下 棋牌类游戏是目前比较火的游戏之一。今天本文就以实例形式实现洗牌游戏。本文实例所采用的算法是:遍历每个位置上的牌,然后与随机位置上的牌交换。 运行结果如下图所示: 对于牌来讲,2个关键的因素是面值和类型(如红桃、梅花等)。 代码如下: 客户端程序有3个方法,一个是初始化牌的数组,一个是遍历所有牌并

  • 我正在使用单个节点hadoop作业做一些数据准备。我的作业中的映射器/组合器输出许多键(超过5M或6M),显然作业进行得很慢,甚至失败。映射阶段最多运行120个mapper并且只有一个reducer(这些是自动确定的,我没有为它们设置任何值)。我想优化作业,使洗牌/排序阶段更有效地发生。我将增加到300M,但作业失败了,因为它的值大于映射器堆。然后我将设置为-xmx1024m,但它再次失败,因为它

  • 本文向大家介绍C语言实现洗牌与发牌游戏,包括了C语言实现洗牌与发牌游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现洗牌与发牌游戏的具体代码,供大家参考,具体内容如下 普通版 高性能版 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C#实现随机洗牌的方法,包括了C#实现随机洗牌的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现随机洗牌的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 大多数纸牌游戏都需要洗牌,也就是让纸牌随机排列。在第10.5节,我们看到了怎样生成随机数,但怎样利用随机数实现洗牌功能却并非显然意见的。 一种可行的方案是,模拟人洗牌的方法,将牌分为两堆,然后通过在每个牌堆中轮流选择的方式实现原牌堆的重新组织。因为一般而言,人并不能做到完美地洗牌,而程序经过大约7次迭代之后,牌堆中纸牌的顺序已经相当随机了。但是计算机程序每次在做完美洗牌的时候有一个令人讨厌的属性—

  • 本文向大家介绍java和js实现的洗牌小程序,包括了java和js实现的洗牌小程序的使用技巧和注意事项,需要的朋友参考一下 这几天刚学了java和javascript,简单写了个用java和javascript的小程序 JavaScript的 java的 总结 以上所述是小编给大家介绍的java和js实现的洗牌小程序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非