Spark: Diffusion variables: Il semble que vous essayez de référence SparkContext à partir d'une émission variable, de l'action, ou de transforamtion

Class ProdsTransformer:

    def __init__(self):  
      self.products_lookup_hmap = {}
      self.broadcast_products_lookup_map = None

    def create_broadcast_variables(self):
      self.broadcast_products_lookup_map = sc.broadcast(self.products_lookup_hmap)

    def create_lookup_maps(self):
    // The code here builds the hashmap that maps Prod_ID to another space.

pt = ProdsTransformer ()
pt.create_broadcast_variables()  

pairs = distinct_users_projected.map(lambda x: (x.user_id,    
                         pt.broadcast_products_lookup_map.value[x.Prod_ID]))

J'obtiens l'erreur suivante:

"Exception: Il semble que vous essayez de référence
SparkContext à partir d'une émission variable, de l'action, ou de transforamtion.
SparkContext peut être utilisé uniquement sur le pilote, pas dans le code de l'exécuter
sur les travailleurs. Pour plus d'informations, voir l'ÉTINCELLE-5063."

D'aide avec la façon de traiter avec la diffusion des variables sera grande!

Ce n'est pas assez de code et/ou des données de l'échantillon pour quelqu'un d'essayer de reproduire l'erreur et/ou le fixer. Aussi, dans le cas où vous n'avez pas remarqué, tous l'indentation est extirpé du python.
J'ai ajouté plus de code.
Je me demande si l'erreur serait de s'en aller si vous avez déplacé le products_lookup_map des propriétés de ProdsTransformer instances et au lieu de cela fait un mondial. Avez-vous besoin de plus d'une carte?
J'ai besoin de plusieurs cartes.
OK, je pense que l'erreur signifie que l'appel sc ou rdd fonctions est interdit au sein des travailleurs, c'est à dire dans toute étincelle de la fonction comme map(), flatmap(), reduce(), etc.... Vous pouvez uniquement appeler sc.something dans le programme principal. Ainsi, par exemple, vous pouvez enchaîner les cartes, mais vous ne pouvez pas avoir une carte à l'intérieur d'une carte. Et apparemment, la diffusion est en vertu de ce genre de restriction. J'ai vu l'étincelle mutilation des classes personnalisées, et donc il y a quelques loisirs d'instances de la classe sur les travailleurs de données sérialisées qui est déplacé autour.

OriginalL'auteur user3803714 | 2015-07-20