2017-05-16 5 views
2

私は非常に単純なSpark scala word countプログラムをデバッグしようとしました。スパークは「怠け者」なので、「アクション」ステートメントにブレークポイントを置き、そのコード行を実行する必要があると思うので、そのステートメントの前にRDD変数をチェックしてデータを確認することができます。だから、私は14行目にブレークポイントを置いて、そこにデバッグが来たら、私は14行目を実行するためのステップを踏んだ。しかしそれをした後、デバッグセッション変数ビューのvaraibles text1、text2のデータは見えない。私は、デバッグビューの "all"変数内のデータを見ることができます)。私はこの権利をしていますか? text1/text2変数のデータが表示されないのはなぜですか?eclipseでRDD内のデータを見つける場所Spark scala debug session?

これは私がどこかでテキスト2変数ビューで(aa,2),(bb,1),(cc,2)などを見ることを期待言葉でテキストファイルAA AA BB CCはCC

です:

は私wordCount.txtはこのようなものですと仮定します。しかし、私はそこのようなものは見つけられません。コードのスクリーンショットを参照してください。

私はeclipse NeonとSpark2.1を使用しています。これはeclipseのローカルデバッグセッションです。広範な検索の後に私が情報を得ることができないので、あなたの助けは本当に感謝しています。 は、ここに私のコードです:あなたが期待するよう

package Big_Data.Spark_App 

import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 

object WordCount { 
    def main(args: Array[String]){ 
    val conf=new SparkConf().setAppName("WordCountApp").setMaster("local") 
    val sc = new SparkContext(conf)  
    val text = sc.textFile("/home/cloudera/Downloads/wordCount.txt") 
    val text1 = text.flatMap(rec=>rec.split(" ")).map(rec=>(rec,1)) 
    val text2 = text1.reduceByKey((v1,v2)=>v1+v2).cache 

    val all = text2.collect() //line 14 
    all.foreach(println)   
    } 
} 

Here's the debug variable view shows that no actual data in text2 variable

答えて

0

スパークは、各変数を評価していない、それがトリガー(例えば収集)と呼ばれる一回実行されますDAGを構築し、この記事は、より多くのでこれを説明してdetail:How DAG works under the covers in RDD?基本的に、これらの中間変数は、作成した連鎖操作の参照のみを格納します。中間結果を調べる場合は、各変数にcollectをコールする必要があります。

EDIT:

はあなたにもスパーク操作内部変数を検査するためのオプションを持っていることを、上記に言及し忘れました。あなたはこのようなマッパーを打破言う:

val conf=new SparkConf().setAppName("WordCountApp").setMaster("local") 
val sc = new SparkContext(conf) 
val text = sc.textFile("wordcount.txt") 
val text1 = text.flatMap{ rec => 
    val splitStr = rec.split(" ") //can inspect this variable 
    splitStr.map(r => (r, 1)) //can inspect variable r 
} 
val text2 = text1.reduceByKey((v1,v2)=>v1+v2).cache 
val all = text2.collect() 
all.foreach(println) 

あなたがテキストの行ごとsplitStrを検査する例えば、各単語のrを検査する次の行には、マッパーでブレークポイントを置くことができます。

+0

クイックレスポンスに感謝してくれたJamborta!私はそのリンクをチェックアウトします。これにより、既存のコードをデバッグするのが難しくなります。 – Jerry

+0

@Jerry多分追加情報が役に立ちますか? – jamborta

+0

私はちょうどあなたの新しいコードを使用し、はいそれは働いた!もう一度あなたの専門知識に感謝します! – Jerry

1

スパークが遅れて評価されます。

rdd.take(20).foreach(x => println(x)) 

以上、rdd.sample、rdd.sampleWithDeviation、rdd.sampleWithReplacement、sampleByKeyなどが挙げられる。これらは、大規模なデータをより広範な画像を与える:私は何をやっていることは、私がコンソールに印刷したい場合は、私が使用して..ですセット。
次に、あなたが印刷できるrdd.toDebugStringがあります!
最後に、ブレークポイントを設定し、RDDをEclipse/IntelliJデバッガで観察することができますが、評価後にのみ実行プランが表示されますが、値は表示されません。

+0

追加情報ありがとうございます! – Jerry

関連する問題