【问题标题】:Scala assign value in if else statementScala 在 if else 语句中赋值
【发布时间】:2020-01-20 17:59:53
【问题描述】:

对 scala 来说很新。

我有一个 if else 语句,它基于条件为变量赋值。

import org.apache.spark.ml.{Pipeline, PipelineModel, PipelineStage}
modelType = "rf" 

def train(trainingData: DataFrame): PipelineModel = {

        val xgb = new XGBoostClassifier()
          .setLabelCol("label")
          .setFeaturesCol("features")
          .setObjective("binary:logistic")
          .setEvalMetric("auc")  

        val rf = new RandomForestClassifier()
          .setLabelCol("label")
          .setFeaturesCol("features")
          .setImpurity("gini")

         if (modelType == "rf") {
             val pipeline = new Pipeline()
              .setStages(Array[PipelineStage](rf))
             } else if (modelType == "xgb") {
            val pipeline = new Pipeline()
              .setStages(Array[PipelineStage](rf))
             }


        pipeline.fit(trainingData)
        }

但我看到了这个错误:pipeline not found。这是否意味着未分配管道变量?我该如何重写?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql apache-spark-mllib


    【解决方案1】:

    您将 if 设置为变量

      val xgb = new XGBoostClassifier()
                  .setLabelCol("label")
                  .setFeaturesCol("features")
                  .setObjective("binary:logistic")
                  .setEvalMetric("auc")  
    
                val rf = new RandomForestClassifier()
                  .setLabelCol("label")
                  .setFeaturesCol("features")
                  .setImpurity("gini")
    
               val pipeline =  if (modelType == "rf") {
                      new Pipeline()
                      .setStages(Array[PipelineStage](rf))
                     } else if (modelType == "xgb") {
                    new Pipeline()
                      .setStages(Array[PipelineStage](rf))
                     }
                      }
    
                pipeline.fit(trainingData)
                }
    

    【讨论】:

    • 详细说明,一般来说,在块中定义的val(包括if 的 then 或 else 子句)仅在该块结束之前可见。
    • @LeviRamsey 谢谢你的解释。我知道我的回答缺乏解释。我遇到了与 OP 相同的问题,并且花费了比我愿意承认的更多时间寻找答案。我从来没有尝试过只研究所需的语法,所以谢谢!
    • 为了进一步阐明这个工作的原因,当任何闭包被解决时,它会解析为最后一行的值。在这种情况下,最后一行是new Pipeline
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2011-10-30
    • 2019-04-09
    相关资源
    最近更新 更多