2017-03-29 4 views
0

SparkとScalaを使い始めたばかりです。私たちはdev cloudera hadoopクラスタにSpark 2をインストールしました。私はspark2-shellを使用しています。基本を学ぶために本を読んでいます。Spark Scala printlnにはcollect()が必要ですか?

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> 

あなたが見ることができるように、私は(コレクトを行う場合を除き、何も出力しません):それは例が収集を行わず作業のprintln(FOO)を示しているが、それは私のために働いていないのです。

何が起こっている、本が間違っている、または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

どのような環境で実行していますか?クラスタで実行している場合、収集を行わないforeachはまずローカルマシンではなくクラスタ上で実行されます。 – puhlen

+0

ありがとう、それが問題だと思います。 DEVのhadoopクラスタ実行スパークは、いくつかのデータノードを持っています。 – medloh

答えて

3

あなたが経験正しい行動だ、numbers.foreachに渡されたコードは、異なるノード上で実行されますが、出力が収集され、ドライバに返却されません。

+0

Hmm、ok。この本は、単純なローカルVM上で実行されているすべてのものを使って実行することを前提としていました。多分それは私の問題です、私たちのDEVハープクラスタにはいくつかのデータノードがあります。 – medloh

関連する問題