Проблема с загрузкой модели PySpark ALS - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь загрузить модель, созданную с помощью Pyspark. Я создал модель со следующим кодом:

import pandas as pd
from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.ml.recommendation import ALS
from pyspark.ml.tuning import TrainValidationSplit, ParamGridBuilder
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc = SparkContext('local')
spark = SparkSession(sc)

data = pd.read_csv('matrix-out-small.csv')
df = spark.createDataFrame(data)

(training, test) = df.randomSplit([0.8, 0.2])

als = ALS(userCol="CustomerID", itemCol="ProductID", ratingCol="Rating", coldStartStrategy="drop", nonnegative=True)

# Tune model using param grid builder
param_grid = ParamGridBuilder().addGrid(als.rank, [12, 13, 14]).addGrid(als.maxIter, [18, 19, 20]).addGrid(als.regParam, [.17, .18, .19]).build()

evaluator = RegressionEvaluator(metricName="rmse", labelCol="Rating", predictionCol="prediction")

tvs = TrainValidationSplit(estimator=als, estimatorParamMaps=param_grid, evaluator=evaluator)

# fit model to training data
model = tvs.fit(training)

# extract best
best_model = model.bestModel  

best_model.save("modelSaveOut")

Это создает каталог с именем «ModelSaveOut», который содержит «ItemFactors», «метаданные» и «userFactors»

Когда я пытаюсь загрузить модель с помощью ALS.load, я получаю следующее:

model = ALS.load("modelSaveOut")

py4j.protocol.Py4JJavaError: Произошла ошибка при вызове o26.load. : java.lang.NoSuchMethodException: org.apache.spark.ml.recommendation.ALSModel. (java.lang.String)

model = TrainValidationSplit.load("modelSaveOut")

py4j.protocol.Py4JJavaError: Произошла ошибка при вызове o26.load. : java.lang.IllegalArgumentException: требование не выполнено: ошибка загрузка метаданных: ожидаемое имя класса org.apache.spark.ml.tuning.TrainValidationSplit, но найдено имя класса org.apache.spark.ml.recommendation.ALSModel

Кажется, я не загружаю модель, используя правильный объект / метод. Можно ли сохранить «bestModel» или мне нужно сохранить всю модель, используя другой метод?

1 Ответ

1 голос
/ 27 марта 2019

Если вы прочитали трассировку исключений

но найдено имя класса org.apache.spark.ml.recommendation.ALSModel

он точно скажет вам, что делать:

 from pyspark.ml.recommendation import ALS, ALSModel

 ALSModel.load("modelSaveOut")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...