【问题标题】:Spark Scala println requires a collect()? [duplicate]Spark Scala println 需要一个collect()? [复制]
【发布时间】:2017-03-29 17:12:10
【问题描述】:

刚刚开始使用 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)

【问题讨论】:

  • 你在什么环境下运行?如果您在集群上运行,则没有收集的 foreach 将首先在集群上而不是您的本地计算机上运行。
  • 谢谢,我猜这就是问题所在。我们运行 spark 的 DEV hadoop 集群有几个数据节点。

标签: scala apache-spark cloudera


【解决方案1】:

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

【讨论】:

  • 嗯,好的。这本书假设您将在一个简单的本地虚拟机上运行它,所有东西都在那里运行。也许这是我的问题,我们的 DEV hadoop 集群有几个数据节点。
猜你喜欢
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2022-01-01
相关资源
最近更新 更多