在Scala中将字典保存为.txt文件

时间:2019-02-14 08:55:33

标签: java scala apache-spark

因此,我正在使用超参数调整来训练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}

那我该怎么办呢?我已经看过thisthis之类的帖子,但出于我的目的还无法弄清楚代码。

1 个答案:

答案 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}}