Das KNN-Modell gibt bei Verwendung von pyfuncModuleNotFoundError oder FileNotFoundError zurück.

Problem

Sie haben ein Sklearn-Modell mit erstellt KNeighborsClassifier und verwenden , um eine pyfunc Vorhersage auszuführen.

Beispiel:

import mlflow.pyfunc
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri, result_type='string')
predicted_df = merge.withColumn("prediction", pyfunc_udf(*merge.columns[1:]))
predicted_df.collect()

Die Vorhersage gibt eine ModuleNotFoundError: No module named 'sklearn.neighbors._classification' Fehlermeldung zurück.

Die Vorhersage kann auch eine FileNotFoundError: [Errno 2] No usable temporary directory found Fehlermeldung zurückgeben.

Ursache

Wenn ein KNN-Modell protokolliert wird, werden alle für das Training verwendeten Datenpunkte als Teil der Pickle-Datei gespeichert.

Wenn das Modell mit Millionen von Datensätzen trainiert wird, werden alle diese Daten dem Modell hinzugefügt, was seine Größe erheblich erhöhen kann. Ein Modell, das mit Millionen von Datensätzen trainiert wurde, kann problemlos mehrere GB gesamt haben.

pyfunc versucht, das gesamte Modell in den Cache des Executors zu laden, wenn eine Vorhersage ausgeführt wird.

Wenn das Modell zu groß ist, um in den Arbeitsspeicher zu passen, führt dies zu einer der oben genannten Fehlermeldungen.

Lösung

Sie sollten einen strukturbasierten Algorithmus wie Random Forest oder XGBoost verwenden, um die Daten in einem KNN-Modell zu downsampleieren.

Wenn Sie über unausgeglichene Daten verfügen, versuchen Sie beim Trainieren eines strukturbasierten Algorithmus eine Samplingmethode wie SMOTE.