2017-03-29 4 views
0

Erste Schritte mit Spark und Scala. Wir haben Spark 2 auf unserem dead cloudera-Hadoop-Cluster installiert und ich verwende spark2-shell. Ich gehe durch ein Buch, um ein paar Grundlagen zu lernen. Es ist Beispiele zeigen println (foo) arbeiten, ohne eine collect zu tun, aber das funktioniert nicht für mich:Spark Scala println erfordert ein Sammeln()?

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> 

Wie Sie sehen können, nichts gedruckt, wenn ich ein R-do().

Was ist los, ist das Buch falsch, oder ist etwas komisches mit meinem Spark/Scala/Config?

Version Info:

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

In welche Umgebung laufen Sie? Wenn Sie auf einem Cluster ausgeführt werden, wird die foreach ohne eine Erfassung zuerst auf dem Cluster und nicht auf Ihrem lokalen Computer ausgeführt. – puhlen

+0

Danke, denke, das ist das Problem. Unser DEV-Hadoop-Cluster-Funke hat einige Datenknoten. – medloh

Antwort

3

Das ist das richtige Verhalten Sie erleben, die zu numbers.foreach weitergegeben Code wird auf den verschiedenen Knoten ausgeführt werden, aber die Ausgabe wird nicht zurückgegeben und an den Fahrer gesammelt werden.

+0

Hmm, ok. Das Buch ging davon aus, dass Sie es auf einer einfachen lokalen VM ausführen würden, auf der alles läuft. Vielleicht ist das mein Problem, unser DEV-Hadoop-Cluster hat ein paar Datenknoten. – medloh