无法从 pyspark 加载管道模型
Cannot load pipeline model from pyspark
您好,我尝试在 pyspark 中使用管道模型加载已保存的管道。
selectedDf = reviews\
.select("reviewerID", "asin", "overall")
# Make pipeline to build recommendation
reviewerIndexer = StringIndexer(
inputCol="reviewerID",
outputCol="intReviewer"
)
productIndexer = StringIndexer(
inputCol="asin",
outputCol="intProduct"
)
pipeline = Pipeline(stages=[reviewerIndexer, productIndexer])
pipelineModel = pipeline.fit(selectedDf)
transformedFeatures = pipelineModel.transform(selectedDf)
pipeline_model_name = './' + model_name + 'pipeline'
pipelineModel.save(pipeline_model_name)
此代码成功将模型保存在文件系统中,但问题是我无法加载此管道以在其他数据上使用它。当我尝试使用以下代码加载模型时出现此类错误。
pipelineModel = PipelineModel.load(pipeline_model_name)
Traceback (most recent call last):
File "/app/spark/load_recommendation_model.py", line 12, in <module>
sa.load_model(pipeline_model_name, recommendation_model_name, user_id)
File "/app/spark/sparkapp.py", line 142, in load_model
pipelineModel = PipelineModel.load(pipeline_model_name)
File "/spark/python/lib/pyspark.zip/pyspark/ml/util.py", line 311, in load
File "/spark/python/lib/pyspark.zip/pyspark/ml/pipeline.py", line 240, in load
File "/spark/python/lib/pyspark.zip/pyspark/ml/util.py", line 497, in loadMetadata
File "/spark/python/lib/pyspark.zip/pyspark/rdd.py", line 1379, in first
ValueError: RDD is empty
问题是什么?我该如何解决这个问题?
我遇到了同样的问题。问题是我在节点集群上 运行 Spark,但我没有使用共享文件系统来保存我的模型。因此,保存经过训练的模型会导致将模型的数据保存在内存中有数据的 Spark worker 上。当我想加载数据时,我使用了与保存过程中相同的路径。遇到这种情况,Spark master去ITS LOCAL中的指定路径下查找模型,但是那里的数据并不完整。因此,它断言 RDD(数据)为空(如果您查看保存模型的目录,您会看到只有 SUCCESS
个文件,但对于加载模型,另外两个 part-0000
文件是必需的)。
使用像 HDFS 这样的共享文件系统可以解决这个问题。
您好,我尝试在 pyspark 中使用管道模型加载已保存的管道。
selectedDf = reviews\
.select("reviewerID", "asin", "overall")
# Make pipeline to build recommendation
reviewerIndexer = StringIndexer(
inputCol="reviewerID",
outputCol="intReviewer"
)
productIndexer = StringIndexer(
inputCol="asin",
outputCol="intProduct"
)
pipeline = Pipeline(stages=[reviewerIndexer, productIndexer])
pipelineModel = pipeline.fit(selectedDf)
transformedFeatures = pipelineModel.transform(selectedDf)
pipeline_model_name = './' + model_name + 'pipeline'
pipelineModel.save(pipeline_model_name)
此代码成功将模型保存在文件系统中,但问题是我无法加载此管道以在其他数据上使用它。当我尝试使用以下代码加载模型时出现此类错误。
pipelineModel = PipelineModel.load(pipeline_model_name)
Traceback (most recent call last):
File "/app/spark/load_recommendation_model.py", line 12, in <module>
sa.load_model(pipeline_model_name, recommendation_model_name, user_id)
File "/app/spark/sparkapp.py", line 142, in load_model
pipelineModel = PipelineModel.load(pipeline_model_name)
File "/spark/python/lib/pyspark.zip/pyspark/ml/util.py", line 311, in load
File "/spark/python/lib/pyspark.zip/pyspark/ml/pipeline.py", line 240, in load
File "/spark/python/lib/pyspark.zip/pyspark/ml/util.py", line 497, in loadMetadata
File "/spark/python/lib/pyspark.zip/pyspark/rdd.py", line 1379, in first
ValueError: RDD is empty
问题是什么?我该如何解决这个问题?
我遇到了同样的问题。问题是我在节点集群上 运行 Spark,但我没有使用共享文件系统来保存我的模型。因此,保存经过训练的模型会导致将模型的数据保存在内存中有数据的 Spark worker 上。当我想加载数据时,我使用了与保存过程中相同的路径。遇到这种情况,Spark master去ITS LOCAL中的指定路径下查找模型,但是那里的数据并不完整。因此,它断言 RDD(数据)为空(如果您查看保存模型的目录,您会看到只有 SUCCESS
个文件,但对于加载模型,另外两个 part-0000
文件是必需的)。
使用像 HDFS 这样的共享文件系统可以解决这个问题。