2016-05-06 7 views
-3

私はファイルを読み込み、文字列内の各ラインを連結しようとしています、以下のコードでありますforeach自体でPrintlnステートメントを使用します。 しかし、私はforeachの外に文字列変数を印刷すると、それは空です。 これには何らかの理由がありますか?理想的には、入力された値で印刷する必要があります。のforeach操作が

  1. さらにもう1つの質問ですが、上記のコードで.foreachの代わりに.mapを使用するとどうなりますか。私がこのケースで試したときに、何も文字列に取り込まれません。たとえ.mapコード内のprintlnステートメントでも空白が表示されます。私の理解はマップもこの場合に動作する必要がありますか?

私はあなたが火花で初心者だと思うので、最初の変換(マップ、flatmap、reduceby ....)、アクション(とり、収集...)のような程度spark概念を学ぶ事前

+1

が含まれている文字列の配列を取得しますあなた

val rddOfString = sc.textFile("file_path").map{ line => (1,line)//add unique key on each line }.reduceByKey(_+_)//use reduce by for concatenation all lines .map(_._2)//select your concat string .collect//collect your data 

のに役立ちます設計。あなたが提供するコードはそのままコンパイルされません。あなた自身でいくつかの調査を行い、少なくともそれを実行しようとするために時間をかけてください。それ以外の場合、質問はおそらく閉じられるか無視されます。 –

+0

すべてのワーカーにvar 'str'のコピーがあり、返されません。この質問(http://stackoverflow.com/a/29418504/21755)を参照してください。実際、これは明らかであるはずです - Sparkの全体的なポイントは、複数のワーカーに作業を分散させることです。 –

答えて

0

でのおかげでよりコードを実装します。

あなたのシナリオは無効ですが、あなたは、連結のすべての行をしたい、このコードは、あなたが最初のインデックスは、質問が不十分である、あなたの出力

val str=rddOfString(0) 
+0

文字列に '(_ + _)'をしないでください。 – zero323

+0

@Gabber:コードのためにありがとう、私のために働いたが、rddOfString(0)ではなくstr = rddOfString.first()を使用しています。はい、私はスパークするために新しいですが、私はforeachとmapのような変換についての基本的な理解を持っています。この問題の理由はforeachであっても、このケースではそれぞれのパラメータにforeachが働くように働く必要があります。 –

+0

@yuvrajrajpurohitコメントはありましたか?それはあなたがそのような労働者の間で共有される変更可能な価値を持つことができないので、機能しません。 –