因此,我正在使用超参数调整来训练xgboost
。所以我的代码片段看起来像这样:
val paramGrid = new ParamGridBuilder().
addGrid(booster.minChildWeight, Array(0.3,0.6,0.7, 0.8)).
addGrid(booster.eta, Array(0.1,0.2,0.4, 0.6)).
build()
val cv = new CrossValidator().
setEstimator(pipeline).
setEvaluator(evaluator).
setEstimatorParamMaps(paramGrid).
setNumFolds(10)
val cvModel = cv.fit(df)
val bestModel = cvModel.bestModel.asInstanceOf[PipelineModel].stages(1).
asInstanceOf[XGBoostClassificationModel]
现在,我想将参数映射保存为txt并在以后解析。但是,当我尝试将其导出到文本文件中时,如下所示:
bestModel.extractParamMap()
val file = new File("/home/hadoop/test/hyper_params.txt")
val bw = new BufferedWriter(new FileWriter(file))
bw.write(bestModel.extractParamMap())
bw.close()
我遇到以下错误:
error: overloaded method value write with alternatives:
(x$1: Int)Unit <and>
(x$1: String)Unit <and>
(x$1: Array[Char])Unit
cannot be applied to (org.apache.spark.ml.param.ParamMap)
bw.write(bestModel.extractParamMap())
我对scala还是很陌生,还无法找到有关如何将参数映射保存到.txt
文件的任何解决方案。这是我的问题的第一步。
接下来,我想创建一些变量,在其中我要从.txt
文件中读取保存的参数值。
说像这样:
val min_child_weight=('../param.txt){key value here}
答案 0 :(得分:0)
首先,您不会使用常规的BufferedWriter将Spark中的内容保存到本地文件系统中。通常,对于数据框和RDD,您将使用Spark API并为路径MLWriter
加上前缀,如下所示-How to save Spark RDD to local filesystem。另外,您将使用spark
.sparkContext
.parallelize(List(bestModel.extractParamMap().toString))
.saveAsTextFile("file:///home/hadoop/test/hyper_params.txt")
做您的工作,并像这样保存整个管道-https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-mllib/spark-mllib-pipelines-persistence.html。
已更新:
{{1}}