我正在使用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
我不确定它指的是哪个集合。任何想法如何正确加载(或保存)模型?
答案 0 :(得分:0)
在将Jupyter Notebook安装在4个不同的Docker容器上的Spark集群上遇到了类似的问题。通过使用可以由所有dockers容器更新并保存模型的同一永久文件夹修复了该问题。因此,建议确保您使用的是相同的持久文件夹,并且spark和python程序可以更新它