为什么Spark级只有一个功能而不是在Map阶段进行如此多的转换

lztngnrs  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(337)

我搞不懂为什么一个舞台只有一个功能。在下面的代码中,map stage应该包含两个map函数,而不是一个;

def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("test").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val data = Array("Runoob", "Baidu", "Google")

    val distData = sc.parallelize(data).map(x => (x, 1))
      .map(x => x._2 + 1)
      .collect()
    distData.length
  }

stage是一组独立的任务,所有任务都计算需要作为spark作业的一部分运行的相同函数,其中所有任务都具有相同的shuffle依赖项。调度程序运行的每一个dag任务在发生洗牌的边界处被分为多个阶段,然后dagscheduler按拓扑顺序运行这些阶段。
此url中的阶段含义;在此处输入链接说明

rqcrx0a6

rqcrx0a61#

连续的 map 操作通常可以合并到单个 map 操作。据推测,斯帕克意识到

x => (x, 1)

x => x._2 + 1

相当于

x => (x, 1) => 1 + 1

x => 2 ,这是一个单一的函数。这就是为什么你在spark阶段只看到一个函数。

相关问题