¿PySpark serializa el objeto referenciado ‘self’ en lambdas de mapas?

Según tengo entendido, al utilizar la interfaz de Spark Scala debemos tener cuidado de no serializar innecesariamente un objeto completo cuando solo se necesitan uno o dos atributos: ( http://erikerlandson.github.io/blog/2015/03/ 31 / higienic-closures-for-scala-function-serialization / )

¿Cómo funciona esto cuando se utiliza PySpark? Si tengo una clase de la siguiente manera:

class C0(object): def func0(arg): ... def func1(rdd): result = rdd.map(lambda x: self.func0(x)) 

¿Esto da como resultado decapado de las instancias completas de C0? Si es así, ¿cuál es la forma correcta de evitarlo?

Gracias.

De acuerdo con esta documentación: http://spark.apache.org/docs/latest/programming-guide.html#passing-functions-to-spark .

Para evitarlo, haz algo como:

 class C0(object): def func0(self, arg): # added self ... def func1(self, rdd): # added self func = self.func0 result = rdd.map(lambda x: func(x)) 

La moraleja de la historia: evitar la palabra clave self en cualquier lugar en una llamada de mapa. La chispa puede ser inteligente en cuanto a serializar una sola función si puede calcular la función en un cierre local, pero cualquier referencia a la self fuerza obliga a serializar todo su objeto.