Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala在if-else语句中赋值_Scala_Apache Spark_Apache Spark Sql_Apache Spark Mllib - Fatal编程技术网

Scala在if-else语句中赋值

Scala在if-else语句中赋值,scala,apache-spark,apache-spark-sql,apache-spark-mllib,Scala,Apache Spark,Apache Spark Sql,Apache Spark Mllib,对scala来说是个新手 我有一个if-else语句,它基于一个条件,为一个变量赋值 import org.apache.spark.ml.{Pipeline, PipelineModel, PipelineStage} modelType = "rf" def train(trainingData: DataFrame): PipelineModel = { val xgb = new XGBoostClassifier() .setLabelCol(

对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)
        }

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

您将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)
            }

一般来说,在包含if的then或else子句的块中定义的val只有在该块结束时才可见。@LeviRamsey感谢您的解释。我知道我的回答缺乏解释。我和OP有同样的问题,花了比我想承认的更多的时间寻找答案。我从来没有尝试过研究更多的语法,所以谢谢你!为了进一步阐明此操作的原因,当解析任何闭包时,它将解析为最后一行的值。在本例中,最后一行是新管道。