【问题标题】:"empty collection" error when trying to load a saved Spark model using pyspark尝试使用 pyspark 加载保存的 Spark 模型时出现“空集合”错误
【发布时间】:2017-06-12 09:08:02
【问题描述】:

我正在使用 Spark 构建一个随机森林模型,我想保存它以供以后再次使用。我在没有 HDFS 的 pyspark (Spark 2.0.1) 上运行它,所以文件保存到本地文件系统。

我试过这样做:

import pyspark.sql.types as T
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.classification import RandomForestClassifier

data = [[0, 0, 0.],
        [0, 1, 1.],
        [1, 0, 1.],
        [1, 1, 0.]]

schema = T.StructType([
    T.StructField('a', T.IntegerType(), True),
    T.StructField('b', T.IntegerType(), True),
    T.StructField('label', T.DoubleType(), True)])

df = sqlContext.createDataFrame(data, schema)

assembler = VectorAssembler(inputCols=['a', 'b'], outputCol='features')
df = assembler.transform(df)

classifier = RandomForestClassifier(numTrees=10, maxDepth=15, labelCol='label', featuresCol='features')
model = classifier.fit(df)

model.write().overwrite().save('saved_model')

然后,加载模型:

from pyspark.ml.classification import RandomForestClassificationModel

loaded_model = RandomForestClassificationModel.load('saved_model')

但我收到此错误:

Py4JJavaError: An error occurred while calling o108.load.
: java.lang.UnsupportedOperationException: empty collection

我不确定它指的是哪个集合。任何想法如何正确加载(或保存)模型?

【问题讨论】:

  • 我见过几个与此类似的问题,但他们遇到的错误与我的不同,例如stackoverflow.com/questions/40327379/…
  • 这个问题还有效吗?我刚刚检查了在没有 HDFS 的情况下运行的 Spark 3.1.2,并且您粘贴的代码开箱即用。也许尝试升级 Spark 版本,因为这个问题似乎已经解决了

标签: python apache-spark pyspark apache-spark-mllib


【解决方案1】:

在 4 个不同的 docker 容器上安装了 jupyter notebook 的 spark 集群上遇到了类似的问题。通过使用相同的持久文件夹修复了该问题,该文件夹可以由所有 docker 容器更新并将模型保存在其上。所以建议是确保您使用相同的持久文件夹,并且 spark 和您的 python 程序可以更新它

【讨论】:

  • 能否提供一个关于如何设置持久文件夹的示例?
猜你喜欢
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2019-02-21
  • 2021-08-05
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多