Ich habe komplizierte Funktion, die ich über einen Datensatz in Spark mit der Kartenfunktion ausführen. Es ist in einem anderen Python-Modul. Wenn die Map aufgerufen wird, haben die Executor-Knoten diesen Code nicht und die Map-Funktion schlägt fehl.Wie kann ich Spark dazu bringen, Code in einem anderen Modul zu sehen?
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()
Spark schlägt fehl, da myOtherModule nicht importiert werden kann.
Bisher habe ich es geschafft, indem ich ein Python-Paket erstellt habe, das someOtherModule enthält und das im Vorfeld meiner Spark-Jobs an den Cluster weiterleitet, aber das macht kein Rapid-Prototyping.
Wie bekomme ich Funken, um den vollständigen Code an die Executor-Knoten zu senden, ohne den gesamten Code in "sparkInnerLoop" zu inlinern? Dieser Code wird an anderer Stelle in meiner Lösung verwendet, und ich möchte keine Code-Duplizierung durchführen.
Ich verwende einen Cluster mit acht Knoten im Standalone-Modus, v 1.6.2, und der Treiber läuft auf meiner Workstation in pycharm.
Das funktionierte sehr gut danke – ThatDataGuy