Я загрузил пакет python в AWS EMR с помощью PySpark. Мой пакет python имеет следующую структуру, в которой у меня есть файл ресурсов (модель sklearn joblib) внутри пакета:
myetllib
├── Dockerfile
├── __init__.py
├── modules
│ ├── bin
│ ├── joblib
│ ├── joblib-0.14.1.dist-info
│ ├── numpy
│ ├── numpy-1.18.4.dist-info
│ ├── numpy.libs
│ ├── scikit_learn-0.21.3.dist-info
│ ├── scipy
│ ├── scipy-1.4.1.dist-info
│ └── sklearn
├── requirements.txt
└── mysubmodule
├── __init__.py
├── model.py
└── models/mymodel.joblib
Затем я архивирую пакет и загружаю в EMR. Теперь я могу импортировать model.py
в консоль, как
from myetllib.mysubmodule.model import load_model, run_model
, но когда я вызываю load_model
, я получаю сообщение об ошибке, что joblib жалуется, что не нашел файл ресурсов пакета, то есть models/mymodel.joblib
Путь правильно настроен как
import joblib
BASE_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)))
MODEL_PATH = os.path.join(BASE_PATH,"models/my_model.joblib")
def load_model():
'''
load scikit-learn model via joblib
'''
with warnings.catch_warnings():
warnings.filterwarnings('ignore', category=UserWarning)
return joblib.load(MODEL_PATH)
, а ошибка выглядит как
NotADirectoryError: [Errno 20] Not a directory: '/mnt/tmp/spark-fc45e56b-06f3-56dd-af44-0ecc93d4gc0d/userFiles-1e3455-a6rf-4adc-592b-bbe41ffa323/etllib-v1.0.0.zip/etllib/mysubmodule/models/my_model.joblib
Кроме того, я получаю еще одну ошибку от sklearn
:
NotADirectoryError: [Errno 20] Not a directory: '/mnt/tmp/spark-904b50d2-0407-43e8-bb46-06a7b334a46b/userFiles-5df387de-066e-498a-8dd3-e8329d0e8252/etllib-v1.0.1.zip/etllib/modules/sklearn/__check_build