无法从pyspark加载管道模型

问题描述 投票:3回答:1

您好,我尝试在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

是什么问题?我该如何解决?

apache-spark pyspark apache-spark-mllib
1个回答
1
投票

我有同样的问题。问题是我在节点集群上运行Spark,但是没有使用共享文件系统来保存模型。因此,保存经过训练的模型导致将模型的数据保存在Spark工人上,而Spark工人的数据已保存在他们的内存中。当我想加载数据时,我使用了与保存过程相同的路径。在这种情况下,Spark主站会在ITS LOCAL中的指定路径中查找模型,但是那里的数据不完整。因此,它断言RDD(数据)为空(如果查看已保存模型的目录,将会看到只有SUCCESS文件,但是对于加载模型,还有两个part-0000文件是必要)。

使用HDFS之类的共享文件系统将解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.