Как загрузить модель искры - PullRequest
0 голосов
/ 01 апреля 2019

Мне не удается загрузить модель и просто сохранить. У меня странная ошибка.

from transforms.api import Output, transform,transform_df
from pyspark.ml.linalg import Vectors
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.classification import LogisticRegressionModel
import logging

logger = logging.getLogger(__name__)

def save_model(spark_session, output, model, model_name='model4'):
    foundry_file_system = output.filesystem()._foundry_fs
    logger.info("The path 1 is : "+ str(foundry_file_system))
    path = foundry_file_system._root_path + "/" + model_name
    logger.info("The path 2 is : "+ str(path))
    model.write().overwrite().session(spark_session).save(path)
    model=LogisticRegressionModel.read().session(spark_session).load(path)
    df_to_predict = spark_session.createDataFrame([(
        Vectors.dense([0.0, 1.1, 0.1]),
        Vectors.dense([2.0, 1.0, -1.0]),
        Vectors.dense([2.0, 1.3, 1.0]),
        Vectors.dense([0.0, 1.2, -0.5]),)], ["features"])
    df_predicted = model.transform(df_to_predict)
    logger.info(df_predicted.show())
    logger.info(df_predicted.count())

def my_compute_function(ctx, output_model):
    training = ctx.spark_session.createDataFrame([
        (1.0, Vectors.dense([0.0, 1.1, 0.1])),
        (0.0, Vectors.dense([2.0, 1.0, -1.0])),
        (0.0, Vectors.dense([2.0, 1.3, 1.0])),
        (1.0, Vectors.dense([0.0, 1.2, -0.5]))], ["label", "features"])
    lr = LogisticRegression(maxIter=10, regParam=0.01)
    model1 = lr.fit(training)
    save_model(ctx.spark_session, output_model, model1, 'model4')

Вот ошибка, которую я получаю:

NonRetryableError: Py4JJavaError: во время вызова произошла ошибка o266.load. : scala.MatchError: [2,3, [1, NULL, NULL, WrappedArray (0,06817659473873602)], [1,1,3, NULL, NULL, WrappedArray (-3,1009356010205322, 2.6082147383214482, -0.38017912254303043), true], false] (класса org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema) в org.apache.spark.ml.classification.LogisticRegressionModel $ LogisticRegressionModelReader.load (LogisticRegression.scala: 1273) ....

1 Ответ

2 голосов
/ 06 мая 2019

Эта ошибка свидетельствует о том, что для загрузки модели использовался метод, отличный от того, который использовался для написания модели.

Вы должны использовать LogisticRegressionModel.load не LogisticRegression.read ()

Это также может быть вызвано тем, что метаданные паркета не совпадают. Я рекомендую вам установить уровень сводных метаданных на NONE

spark.conf.set("parquet.summary.metadata.level", "NONE")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...