我无法加载 Spark 保存的 RandomForestClassificationModel。
环境:Apache Spark 2.0.1,在小型(4 台机器)集群上运行的独立模式。没有 HDFS - 一切都保存到本地磁盘。
构建并保存模型:
classifier = RandomForestClassifier(labelCol="label", featuresCol="features", numTrees=50)
model = classifier.fit(train)
result = model.transform(test)
model.write().save("/tmp/models/20161030-RF-topics-cats.model")
后来,在一个单独的程序中:
model = RandomForestClassificationModel.load("/tmp/models/20161029-RF-topics-cats.model")
gives:
Py4JJavaError: An error occurred while calling o81.load.
: org.apache.spark.sql.AnalysisException: Unable to infer schema for ParquetFormat at /tmp/models/20161029-RF-topics-cats.model/treesMetadata. It must be specified manually;
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$16.apply(DataSource.scala:411)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$16.apply(DataSource.scala:411)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:410)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149)
at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:439)
at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:423)
at org.apache.spark.ml.tree.EnsembleModelReadWrite$.loadImpl(treeModels.scala:441)
at org.apache.spark.ml.classification.RandomForestClassificationModel$RandomForestClassificationModelReader.load(RandomForestClassifier.scala:301
我注意到,当我使用朴素贝叶斯分类器时,相同的代码可以工作。
将模型保存到 HDFS,然后从 HDFS 读取模型可能会解决您的问题。
您有 4 个节点,每个节点都有自己的本地磁盘。
您正在使用 model.write().save("/temp/xxx")
后来,在一个单独的程序中:
您正在使用 load("/temp/xxx")
由于有 4 个节点,有 4 个不同的本地磁盘,因此我不清楚 write.save() 操作期间到底保存了什么(以及保存到哪个本地磁盘),以及 load() 和 load() 操作期间到底保存了什么来自哪个本地磁盘。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)