Spark Scala println 需要一个 collect()?
Spark Scala println requires a collect()?
刚刚开始使用 Spark 和 Scala。我们已经在我们的开发 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)
这是您遇到的正确行为,传递给 numbers.foreach
的代码将在不同的节点上执行,但不会收集输出并返回给驱动程序。
刚刚开始使用 Spark 和 Scala。我们已经在我们的开发 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)
这是您遇到的正确行为,传递给 numbers.foreach
的代码将在不同的节点上执行,但不会收集输出并返回给驱动程序。