【问题标题】:Reformat the scala code and if/ else statement重新格式化 scala 代码和 if/else 语句
【发布时间】:2018-08-24 05:41:15
【问题描述】:

我编写了结合 spark 数据框的 Scala 代码。 起初,它正在工作(仅当我不使用 if else 语句时)。虽然它不是一个干净的代码,但想知道我该如何转换它?

其次,if/else语句不起作用,我怎样才能将python中的值附加到上面的变量中,然后将其用作数据框?

对不起,我是 Scala 的新手。

    %scala

    for(n <- Scalaconfigs){
      var bulkCopyMetadata = new BulkCopyMetadata

      val sourceTable = n(0)
      val targetTable  = n(1) 

      println(sourceTable)
      println(targetTable)
      val df = spark.sql(s"SELECT * FROM ${sourceTable}")


      if (sourceTable == "est.Values"){
        val vs1 = df.withColumn("Duration", 'Duration.cast("double")).withColumn("StartUTC", 'StartTimeUTC.cast("bigint")).select('DeviceID, 'DeviceType, 'StartUTC, 'Duration as 'Duration)

      }
      else if  (sourceTable == "est.tests"){
         val vs1 = df.withColumn("DateUTC", 'DateUTC.cast("Timestamp")).select('ID, 'DateUTC as 'DateUTC)

      }

          val writeConfig = Config(Map(
            "url"               -> url,
            "databaseName"      -> databaseName,
            "dbTable"           -> targetTable,
            "user"              -> user, 
            "password"          -> password,
            "connectTimeout"    -> "5",
            "bulkCopyBatchSize" -> "100000",
            "bulkCopyTableLock" -> "true",
            "bulkCopyTimeout"   -> "600"
          ))

          vs1.bulkCopyToSqlDB(writeConfig)
          //vs1 doesnot take value, when i use if else statements


    }

找不到变量“vs1”。那个错误。我知道它是因为变量 vs1 是在 if else 块中定义的,但是我如何在上面使用它。我试过把它放在上面,但我不确定数据类型。

【问题讨论】:

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


    【解决方案1】:

    vs1 在本地范围内,在外部不可见。在外面声明 vs1 并尝试使用模式匹配而不是 if else

    val vs1 = sourceTable match {
      case "est.Values" =>
        df.withColumn("Duration", 'Duration.cast("double"))
          .withColumn("StartUTC", 'StartTimeUTC.cast("bigint"))
          .select('DeviceID, 'DeviceType, 'StartUTC, 'Duration as 'Duration)
      case "est.tests" =>
       df.withColumn("DateUTC", 'DateUTC.cast("Timestamp"))
         .select('ID, 'DateUTC as 'DateUTC)
    }
    

    【讨论】:

    • 请注意:如果您的sourceTable 不是“est.Values”或“est.tests”,则会抛出异常
    猜你喜欢
    • 2017-10-04
    • 2013-11-26
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2023-03-09
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多