Spark Scala println需要一个collect()?

时间:2017-03-29 17:12:10

标签: scala apache-spark cloudera

刚开始使用Spark和Scala。我们已经在我们的dev cloudera hadoop集群上安装了Spark 2,并且我使用了spark2-shell。我正在阅读一本书来学习一些基础知识。它的例子显示println(foo)在没有收集的情况下工作,但这对我不起作用:

scala> val numbers = sc.parallelize(10 to 50 by 10)
numbers: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[9] at parallelize at <console>:24

scala> numbers.collect().foreach(println)
10                                                                              
20
30
40
50

scala> numbers.foreach(x => println(x))

scala>

正如你所看到的,除非我做了一个collect(),否则什么都不打印。

发生了什么,这本书是错的,还是我的spark / scala / config有趣?

版本信息:

Spark version 2.0.0.cloudera2
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111)

1 个答案:

答案 0 :(得分:4)

这是您遇到的正确行为,传递给numbers.foreach的代码将在不同的节点上执行,但输出将不会被收集并返回给驱动程序。