Sto lavorando con Spark 1.3.0 usando PySpark e MLlib e ho bisogno di salvare e caricare i miei modelli. Io uso il codice come questo (preso dal sito ufficiale documentation)Qual è il modo giusto per salvare caricare i modelli in Spark PySpark
from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating
data = sc.textFile("data/mllib/als/test.data")
ratings = data.map(lambda l: l.split(',')).map(lambda l: Rating(int(l[0]), int(l[1]), float(l[2])))
rank = 10
numIterations = 20
model = ALS.train(ratings, rank, numIterations)
testdata = ratings.map(lambda p: (p[0], p[1]))
predictions = model.predictAll(testdata).map(lambda r: ((r[0], r[1]), r[2]))
predictions.collect() # shows me some predictions
model.save(sc, "model0")
# Trying to load saved model and work with it
model0 = MatrixFactorizationModel.load(sc, "model0")
predictions0 = model0.predictAll(testdata).map(lambda r: ((r[0], r[1]), r[2]))
Dopo provo ad usare model0 ho una lunga traceback, che termina con questo:
Py4JError: An error occurred while calling o70.predict. Trace:
py4j.Py4JException: Method predict([class org.apache.spark.api.java.JavaRDD]) does not exist
at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:333)
at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:342)
at py4j.Gateway.invoke(Gateway.java:252)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:207)
at java.lang.Thread.run(Thread.java:745)
Quindi la mia domanda è - sono io fare qualcosa di sbagliato? Per quanto riguarda il debug dei miei modelli, sono memorizzati (localmente e su HDFS) e contengono molti file con alcuni dati. Ho la sensazione che i modelli vengano salvati correttamente, ma probabilmente non vengono caricati correttamente. Ho anche cercato su google, ma non ho trovato nulla di relativo.
Sembra che questa funzione di salvataggio \ caricamento sia stata aggiunta recentemente in Spark 1.3.0 e per questo ho un'altra domanda: quale era il modo consigliato di salvare \ caricare i modelli prima della versione 1.3.0? Non ho trovato nessun modo per farlo, almeno per Python. Ho anche provato Pickle, ma ho affrontato gli stessi problemi descritti qui Save Apache Spark mllib model in python
Grazie mille! Sembra che questo sia un bug solo per Python. – artemdevel