apache-spark - 无法从 pyspark 加载管道模型

标签 apache-spark pyspark apache-spark-mllib

您好,我尝试在 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 工作人员的内存中。当我想加载数据时,我使用了在保存过程中使用的相同路径。在这种情况下,Spark master 会在 ITS LOCAL 的指定路径中寻找模型,但那里的数据并不完整。因此,它断言 RDD(数据)是空的(如果您查看保存模型的目录,您会看到只有 SUCCESS 文件,但是对于加载模型,另外两个 part-0000 文件是必要的)。

使用像 HDFS 这样的共享文件系统可以解决这个问题。

关于apache-spark - 无法从 pyspark 加载管道模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51257956/

相关文章:

scala - 计算 Spark 中 RDD[Vector] 的平均值

postgresql - 如何使用maven在spark中包含jdbc jar

java - 如何使用apache-spark快速转换多节点上的大规模数据?

python - 与 .join() pyspark 相反

python - 使用 Python 的 Apache Spark TFIDF

scala - 如何将 spark DataFrame 转换为 RDD mllib LabeledPoints?

java - 将 JavaObject `scala.collection.Map<Object,RDD<?>>` 转换为 python 字典

hadoop - 应用程序接受和运行状态之间耗时

python - Pyspark reduceByKey 返回元组列表

python - Pyspark - 调用 pandas_udf 时出错,返回 Series.interpolate() 作为结果