PySpark de diffusion variables locales des fonctions

Je suis d'essayer de créer de diffusion des variables à partir de l'intérieur de Python méthodes (essayer de résumé de certaines méthodes de l'utilitaire, je suis de la création qui s'appuient sur des opérations réparties). Cependant, je n'arrive pas à accéder à l'émission des variables à partir de l'intérieur de l'Étincelle travailleurs.

Disons que j'ai cette config:

def main():
    sc = SparkContext()
    SomeMethod(sc)

def SomeMethod(sc):
    someValue = rand()
    V = sc.broadcast(someValue)
    A = sc.parallelize().map(worker)

def worker(element):
    element *= V.value  ### NameError: global name 'V' is not defined ###

Cependant, si j'ai au lieu de supprimer le SomeMethod() intermédiaire, il fonctionne très bien.

def main():
    sc = SparkContext()
    someValue = rand()
    V = sc.broadcast(someValue)
    A = sc.parallelize().map(worker)

def worker(element):
    element *= V.value   # works just fine

Je préfère ne pas mettre tous mes Étincelle logique dans la méthode main, si je peux. Est-il possible de diffuser des variables sur les fonctions et de leur monde visible à l'Étincelle travailleurs?

Sinon, ce serait un bon modèle de conception pour ce genre de situation-par exemple, je veux écrire une méthode spécifiquement pour l'Étincelle qui s'est auto-contenue et exerce une fonction spécifique, je voudrais ré-utiliser?

InformationsquelleAutor Magsol | 2014-11-16