调用 someRDD.collect.foreach(println) 和 someRDD.foreach(println) 有什么区别

Sun*_*ech 1 scala apache-spark

当我调用 rdd.collect.foreach(println) 时,我从 csv 文件创建了一个 RDD,它按原样返回文件,但 rdd.foreach(println) 返回合并的输出。RDD 上有两个分区。val sc = new SparkContext("local[*]", "WordCount")

    val cities = sc.textFile("C:/Users/PSKUMARBEHL/Desktop/us_cities.csv")
      cities.collect.foreach(println)
      cities.foreach(println)
      println(cities.partitions.length)
Run Code Online (Sandbox Code Playgroud)

Ass*_*son 5

两者有本质的不同。

cities.collect.foreach(println)
Run Code Online (Sandbox Code Playgroud)

首先收集将城市中的所有记录带回驱动程序,然后(因为它是一个数组)打印每一行。这意味着您没有并行性,因为您将所有内容都带给驱动程序。

cities.foreach(println)
Run Code Online (Sandbox Code Playgroud)

另一方面是并行操作。这意味着在城市 RDD 中的每条记录上运行函数 println。这发生在工人身上。如果您使用的是真正的集群(而不是本地主节点),您将不会看到 println 出现在工作线程上。