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
私はときに私と同じコードが動作することに注意したいですNaive Bayes分類器を使用してください。
ええ、私はその問題に精通しています。私はsymlink/tmp/modelsを各ノード上の永続的な記憶域に割り当てることで、すべてのノードにアクセスできるようになります(つまり、各マシンが同じ場所で同じファイルを見つけることができます)。この機能は、DataFramesや未処理のCSVデータなどの機能パレットを読み込む場合に有効です。 –
@NickLothianしかし、シンボリックリンクでは、ノードはお互いのファイルを上書きしませんか?あなたはそれがうまくいくと言った、なぜ分かったの? – braunmagrin
これはノードローカルディスクなので、あるノードが別のノード上のファイルを上書きする方法はありません。 –