Como processar RDDs usando uma classe Python?
Estou implementando um modelo no Spark como uma classe python e sempre que tento mapear um método de classe para um RDD, ele falha. Meu código atual é mais complicado, mas esta versão simplificada está no centro do problema:
class model(object):
def __init__(self):
self.data = sc.textFile('path/to/data.csv')
# other misc setup
def run_model(self):
self.data = self.data.map(self.transformation_function)
def transformation_function(self,row):
row = row.split(',')
return row[0]+row[1]
Agora, se eu executar o modelo assim (por exemplo):
test = model()
test.run_model()
test.data.take(10)
Estou tendo o erro a seguir:
Exceção: parece que você está tentando fazer referência ao SparkContext a partir de uma variável de transmissão, ação ou transformação. O SparkContext pode ser usado apenas no driver, não no código executado nos trabalhadores. Para mais informações, consulte SPARK-5063.
Eu brinquei um pouco com isso, e parece ocorrer com confiabilidade sempre que tento mapear um método de classe para um RDD dentro da classe. Confirmei que a função mapeada funciona bem se eu implementar fora de uma estrutura de classe, então o problema definitivamente tem a ver com a classe. Existe uma maneira de resolver isso?