2016-10-30 38 views
2

我無法加載由Spark保存的RandomForestClassificationModel。爲什麼我無法加載PySpark RandomForestClassifier模型?

環境: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") 

給出:

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 

我注意到,以同樣的代碼時,我使用樸素貝葉斯分類器。

回答

1

將模型保存到HDFS,稍後從HDFS讀取模型可能會解決您的問題。

您有4個節點,每個節點都有自己的本地磁盤。 。 您正在使用model.write()保存( 「/溫度/ XXX」)

後來,在一個單獨的程序: 您正在使用負載( 「/溫度/ XXX」)

既然有4個節點和4個不同的本地磁盤,但我不清楚在write.save()操作期間究竟保存了什麼(以及哪些本地磁盤),以及什麼是load()以及從哪個本地磁盤-disk。

+0

是的,我很熟悉這個問題。我將symlink/tmp/models存儲到每個節點上的持久性存儲中,以便可以全部訪問它(即每臺機器都可以在同一個地方找到相同的文件)。這適用於將功能部件加載爲DataFrame或原始CSV數據。 –

+0

@NickLothian但符號鏈接不要覆蓋其他人的文件嗎?你說它工作正常,你知道爲什麼嗎? – braunmagrin

+0

這些是節點本地磁盤,因此一個節點無法覆蓋另一個節點上的文件。 –