#apache-spark
#apache-spark
Вопрос:
Мне не удается загрузить модель и просто сохранить. Я получил странную ошибку.
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.Ошибка соответствия: [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:
Эта ошибка указывает на использование другого метода для загрузки модели, отличного от того, который использовался для написания модели.
Вы должны использовать LogisticRegressionModel.загружайте не LogisticRegression.read()
Это также может быть вызвано, если метаданные parquet не совпадают. Я рекомендую вам установить уровень сводных метаданных на NONE
spark.conf.set("parquet.summary.metadata.level", "NONE")