在火花簇scala中保存随机森林模型时出错

Posted

技术标签:

【中文标题】在火花簇scala中保存随机森林模型时出错【英文标题】:Error while saving Random Forest Model in spark cluster scala 【发布时间】:2016-07-23 04:53:18 【问题描述】:

我在将随机森林模型保存到磁盘时收到以下 error。 火花集群配置- 火花包-spark-1.6.0-bin-hadoop2.6 模式 - 独立

我通过在每台从机中复制相同的数据来运行 spark

command - localModel.save(SlapSparkContext.get(), path) 模型已经过训练,可以正确预测测试数据

error trace

java.lang.NullPointerException 在 org.apache.parquet.hadoop.ParquetFileWriter.mergeFooters(ParquetFileWriter.java:456) 在 org.apache.parquet.hadoop.ParquetFileWriter.writeMetadataFile(ParquetFileWriter.java:420) 在 org.apache.parquet.hadoop.ParquetOutputCommitter.writeMetaDataFile(ParquetOutputCommitter.java:58) 在 org.apache.parquet.hadoop.ParquetOutputCommitter.commitJob(ParquetOutputCommitter.java:48) 在 org.apache.spark.sql.execution.datasources.BaseWriterContainer.commitJob(WriterContainer.scala:230) 在 org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelation$$anonfun$run$1.apply$mcV$sp(InsertIntoHadoopFsRelation.scala:151) 在 org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelation$$anonfun$run$1.apply(InsertIntoHadoopFsRelation.scala:108) 在 org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelation$$anonfun$run$1.apply(InsertIntoHadoopFsRelation.scala:108) 在 org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:56) 在 org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelation.run(InsertIntoHadoopFsRelation.scala:108) 在 org.apache.spark.sql.execution.ExecutedCommand.sideEffectResult$lzycompute(commands.scala:58) 在 org.apache.spark.sql.execution.ExecutedCommand.sideEffectResult(commands.scala:56) 在 org.apache.spark.sql.execution.ExecutedCommand.doExecute(commands.scala:70) 在 org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132) 在 org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150) 在 org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130) 在 org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:55) 在 org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:55) 在 org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:256) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:148) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:139) 在 org.apache.spark.sql.DataFrameWriter.parquet(DataFrameWriter.scala:329) 在 org.apache.spark.mllib.tree.model.TreeEnsembleModel$SaveLoadV1_0$.save(treeEnsembleModels.scala:453) 在 org.apache.spark.mllib.tree.model.RandomForestModel.save(treeEnsembleModels.scala:65)

【问题讨论】:

如果将 localModel.save(...) 替换为 localModel.count 会出现同样的错误吗? eliasah - 我无法找到任何方法名称计数。我正在使用 spark-mllib_2.10 -version 1.6 然后在运行算法之前对您的供稿数据执行 RF 算法计数 它正在返回正确的 RDD 计数,它不会引发任何错误。 【参考方案1】:

当您尝试保存 Empty DataFrame 时出现错误。检查这行代码之前的步骤是否正在过滤/减少您的记录。

【讨论】:

以上是关于在火花簇scala中保存随机森林模型时出错的主要内容,如果未能解决你的问题,请参考以下文章

保存的随机森林模型在同一数据集上产生不同的结果

Sklearn 随机森林回归器出错

使用 python sklearn 增量训练随机森林模型

将随机森林模型保存到文件?

保存的模型(随机森林)不能作为“新鲜拟合”模型工作 - 类别变量的问题

随机森林预测