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

时间:2017-03-19 12:44:45

标签: 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)

1 个答案:

答案 0 :(得分:4)

这两者根本不同。

cities.collect.foreach(println)

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

cities.foreach(println)
另一方面,

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