2016-10-26 26 views
1

私は、map関数をsparkで利用できる関数呼び出しをしようとしています。 私はスパークチュートリアルのページ(https://spark.apache.org/docs/1.2.0/programming-guide.html)で与えられたことをしました。しかし、関数myFuncは決して呼び出されません。少なくともそれは私の考えです。私は何か間違ったことをしているのか何かを逃しているのか分かりません。 これは、次のコードである。mapに渡される関数は決して呼び出されません。

from pyspark import SparkContext 
if __name__ == "__main__": 
    def myFunc(s): 
     print("@@") 
     words = s.split("\n") 
     print("##") 
     return len(words) 


    sc = SparkContext("local","test") 
    sc.textFile("C:\\TestLogs\\sample.log").map(myFunc) 
    print("**") 

出力:

** 

実際には、これはファイルの場所を除いてスパークドキュメントから同じ例です。

+0

from pyspark import SparkContext if __name__ == "__main__": def myFunc(s): print("@@") words = s.split("\n") print("##") return len(words) sc = SparkContext("local","test") myrdd = sc.textFile("C:\\TestLogs\\sample.log") result = myrdd.map(myFunc).collect() print "the result is" print result print("**") 

は保持するために、次の "\\ファイルを" 更新を検討しますパラメーター)。あなたがそれを呼び出すと、あなたは何の引数も渡していません。それは大丈夫ですか? – facundop

+0

@kaks Sparkは分かりませんが、何かの上にマップすると、_empty_は一度でも関数を呼び出すことはありません。あなたのファイルが実際にデータを提供していることを確認できますか? –

+0

@facundop:はい、パラメータを持っています。しかし、sparkのドキュメントでは、mapでは、関数が 's'で定義されていても、myFuncはパラメータを取らない。 @ŁukaszRogalski:はい、sample.logファイルには10行のログ行があります。 – kaks

答えて

0

コードには、変換(例:「マップ」)を実行するために必要なスパーク「アクション」(「収集」など)がないようです。

は、以下のことを試してみてください。私は、Pythonを知らないが、あなたとあなたの関数を定義した(https://stackoverflow.com/a/27301040/5088142

myrdd = sc.textFile("file:\\C:\\TestLogs\\sample.log") 
+0

ありがとう!それはうまくいった。 – kaks

1

は、ちょうど変換map(myFunc)と呼ばれていないようです。彼らはすぐに その結果を計算していないという点で、スパーク

すべての変換は、怠け者です。代わりに、彼らはちょうど 変換を記憶しますは、いくつかの基本データセット(例えば、ファイル)に適用されます。 変換アクションが にドライバプログラムに返される結果を必要とするときだけ計算あります。

map(myFunc).saveAsTextFile("folder/here.txt")または他のactionをお試しください。

関連する問題