2017-09-11 4 views
0

私はドライバでSparkアプリケーションを実行しています。スパークタスク実行シリーズ

val count=0; 
val test_dataframe =//extrenal frame 
count=test.count(); 
println("The count of frame is " + count); 

私の質問がある従うよう

ですがシンプルである第三行は常にフレームの数を計算した後に実行された場合。データフレームとそのカウントを実行する前に、ドライバが最初にprintlnコマンドを実行することは可能ですか?

+1

データフレームでカウント操作を実行せずにカウントをどのように印刷しますか? –

+0

カウントは最初はゼロとして宣言されます。 – Luckylukee

+0

私はそれを見ました。しかし、それはちょうどゼロを印刷するために私には意味をなさない。この行の 'count = test.count()'の前にprintln文を置くとどうなりますか? –

答えて

1

いいえ上記のコードでは、test.count()より前にprintlnを実行することはできません。カウントは破れ操作であり、端末操作を呼び出すと、移動する前に計算を実行するよう強制されます。

あなたは非同期ここで、その後カウントしたい場合は動作するコードスニペットです:

var future = test.rdd.countAsync 
println("The count before future evaluation: " + count) 
count = future.get 
println("The count after future evaluation: " + count) 

注countAsyncアクションがデータフレーム上で直接利用できないこと。 RDDで実行できます。

+0

私は気にしない、 "test.count"は本質的に非同期操作になります! – Luckylukee

+0

countは、デフォルトでは同期アクションです。 sparkがサポートするいくつかの非同期アクションがあります。 asycの動作が必要な場合は、コードで明示的に言及する必要があります。このクラスを確認してください:http://spark.apache.org/docs/2.2.0/api/java/index.html?org/apache/spark/ rdd/AsyncRDDActions.html –

+0

@Luckylukeeは上記の説明はあなたの疑いを解消しますか?また、非同期カウントのコードスニペットで回答を更新しました。 –

関連する問題