Ich implementiere ein Modell in Spark als Python-Klasse, und jedes Mal, wenn ich versuche, eine Klassenmethode zu einer RDD zuzuordnen, schlägt es fehl. Mein eigentlicher Code ist komplizierter, aber diese vereinfachte Version wird am Kern des Problems:Wie verarbeitet man RDDs mit einer Python-Klasse?
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]
Nun, wenn ich das Modell wie so (zum Beispiel) laufen:
test = model()
test.run_model()
test.data.take(10)
ich die following error:
Ausnahme: Scheint, dass Sie versuchen, SparkContext von einer Übertragungsvariable, einer Aktion oder einer Transforamtion zu verweisen. SparkContext kann nur für den Treiber verwendet werden, nicht für Code, der auf Workern ausgeführt wird. Weitere Informationen finden Sie unter SPARK-5063.
Ich habe mit diesem ein bisschen gespielt, und es scheint zuverlässig jedes Mal, wenn ich versuche, eine Klassenmethode zu einer RDD innerhalb der Klasse zuordnen. Ich habe bestätigt, dass die abgebildete Funktion gut funktioniert, wenn ich außerhalb einer Klassenstruktur implementiere, also hat das Problem definitiv mit der Klasse zu tun. Gibt es eine Möglichkeit, dies zu lösen?
Perfekt - ich dachte nicht an eine statische Methode. Das einzige Problem ist im vollständigen Code, meine Transformationsfunktion muss auf andere Variablen in der Klasse 'model' zugreifen (nicht RDDs). Ich gehe davon aus, dass der einzige Weg, dies zu erreichen, darin besteht, sie als Argumente an die statische Methode zu übergeben. z.B. 'def transformations_function (row, somevar): return row + somevar' – moustachio
Mit anderen Worten: Gibt es eine Möglichkeit, auf Klassenvariablen (' self.whatever') innerhalb einer statischen Methode zuzugreifen? – moustachio
(Beachten Sie, dass dies keine statischen Variablen sein können - ich würde definitiv auf Instanzvariablen innerhalb der statischen Methode zugreifen wollen) – moustachio