マップ関数を使ってsparkでデータセットを実行するという複雑な関数があります。それは別のpythonモジュールにあります。 mapが呼び出されると、executorノードはそのコードを持たず、マップ関数は失敗します。Sparkに別のモジュールのコードを見せるにはどうすればいいですか?
s_cobDates = getCobDates() #returns a list of dates
sb_dataset = sc.broadcast(dataset) #fyi - it is not trivial to slice this into chunks per date
def sparkInnerLoop(n_cobDate):
n_dataset = sb_dataset.value
import someOtherModule
return someOtherModule.myComplicatedCalc(n_dataset)
results = s_cobDates.map(sparkInnerLoop).collect()
スパークは、myOtherModuleをインポートできないため、失敗します。
これまでのところ、someOtherModuleを含むpythonパッケージを作成し、sparkジョブより先にクラスターにデプロイしていますが、これはラピッドプロトタイピングには向いていません。
すべてのコードを "sparkInnerLoop"にインライン展開せずに、完全なコードを実行者ノードに送信するにはどうすればよいですか?そのコードは私のソリューションのどこかで使われているので、コードの重複は望んでいません。
私は8ノードクラスタをスタンドアローンモードで使用しています(v 1.6.2)。ドライバはpycharmの私のワークステーションで動作しています。
これは非常にうまくいきました – ThatDataGuy