je le code simple suivant provoque une erreur concernant la mise en cache:Erreur dans la mise en cache d'un simple RDD avec pyspark alors sans mise en cache le code fonctionne bien (Comment faire une picklable de classe dans un ordinateur portable)
trips_in = sc.textFile("trip_data.csv")
trips = trips_in.map(lambda l: l.split(",")).map(lambda x: parseTrip(x)).cache()
trips.count()
La fonction parseTrip()
obtient une liste de chaînes et crée et retourne un voyage de classe:
class Trip:
def __init__(self, id, duration):
self.id = id
self.duration = duration
Je reçois l'erreur juste après l'action count()
. Cependant, si je supprime le cache()
à la fin de la deuxième ligne tout fonctionne bien. Selon l'erreur, le problème est que le voyage de classe ne peut pas être décapée:
PicklingError: Can't pickle __main__.Trip: attribute lookup __main__.Trip failed
Alors, comment puis-je faire picklable (si elle est un mot réel)? Notez que j'utilise un bloc-notes Databricks, donc je ne peux pas faire un .py distinct pour la définition de classe pour le rendre picklable.