Нужен правильный способ вызова моей модели, чтобы избежать ошибки атрибута pipeModel - PullRequest
0 голосов
/ 03 мая 2019

Я работаю над тем, чтобы сохранить свою модель после конвейера в pyspark 2.4, чтобы позже я смог вспомнить свою модель.Я столкнулся с проблемой при попытке сохранить свою модель, и более короткая версия моего кода выглядит следующим образом:

Функция обучения

    def main(spark, train_file, model_path):
        train = spark.read.parquet(train_file)
        indexer = StringIndexer(...) # convert the string to numerical representation
        als = ALS(...) # this is my ALS model with hand put toy case
        pipeline = Pipeline(stages = [indexer,als])
        model = pipeline.fit(train) # now fit this pipeline to my training data 
        model.write.overwrite().save(model_path)

    if __name__ == "__main__":

        # Create the spark session object
        spark= SparkSession.builder.appName('an_example').getOrCreate()

        # Get the filename from the command line
        train_file = sys.argv[1]
        model_file = sys.argv[2]

        # Call our main routine
        main(spark,train_file, model_file)

Тестированиеfunction

    def main(spark, model_path, test_file):
        test = spark.read.parquet(test_file)
        model = Pipeline.load(model_path)
        # call an attribute from model
        userRecs = model.recommendForAllusers(10)

    if __name__ == "__main__":
        # repeat of what I have up there, with a new appName created

Теперь каждый раз, когда я вызываю ее, я сталкиваюсь со следующей ошибкой:

AttributeError: у объекта PipelineModel нет атрибута RecommendedAllUsers 1013*

Несколько попыток исправить ошибку Я полагаю, что ошибка происходит, потому что теперь моя модель является объектом PipelineModel, чтобы вернуться обратно в объект модели, мне нужно изменить как я сохраняю свою модель

Первая попытка:

sc = SparkContext.getOrCreate()
model.save(sc, model_file)

TypeError: save () принимает 2 позиционных аргумента, но 3 получили

Это потому, что у моего sc есть два компонента: <SparkContext master=yarn appName=an_example>

Вторая попытка: совмещать тренировку и тестирование: Удивительно, но если я позвоню model.recommendForAllusers сразу после того, как подгоняю model = pipeline.fit(train), он все равновыдает мне ту же ошибку атрибута!

Теперь я застрял.Есть два вопроса Я хотел бы знать о:

(1), как правильно сохранить модель с искровым контекстом sc?

(2)Я думаю, что есть несколько способов правильно вызвать модель и при этом иметь доступ к атрибутам модели.Я думаю, что если я исправлю свою проблему в (1), я смогу позвонить по model = als.load(sc,model_path), а остальная часть кода будет работать нормально.Но я бы хотел получить подтверждение.

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