首页 > 解决方案 > [Spark][Scala][DataFrame][withColumn] 在 WithColumn 中使用“when”时无法解析符号“when”

问题描述

我正在创建一个数据框并对特定列的数据进行一些修改。

修改要求 -

所以我的代码 -

val rawDF = reader.readFrmDatabase(DatabaseQueries.rawQuery,ConfigUtils.getDatabaseReadProps)
                  .withColumn("osrelease", when (col("osrelease").isNull || col("osrelease") === "","unknown")
                  .otherwise("osrelease"))

函数 readFrmDatabase 将 Query:String & Configurations: Map[String,String] 作为参数并返回一个数据帧。例子 -

@throws[Exception]
  def readFrmDatabase(query: String, dbProps: Map[String, String], optionalArgs: Option[Map[String, String]]=None)(implicit spark: SparkSession): DataFrame = {
    logInfo("Reading From Database")

    val outDF = Try {
      spark.read.format("jdbc")
        .options(dbProps)
        .options(optionalArgs.getOrElse(Map.empty))
        .option("dbTable",s"""(${query})""")
        .load()
    }
match {
      case Success(success) => success
      case Failure(error) => logError(s"Error while reading Database table $query", error)
        throw new Exception(s"""Error while reading Database table : $query""", error)
    }
    outDF
  }

问题是当我使用 withColumn 时,它接受第一个参数作为 colName:String,但第二个参数不接受。我曾尝试使用 col(") & $"" 但其中任何一个都不起作用。

我遇到了这样的错误-(在图片中,它是红色的) 在此处输入图像描述

请帮我找出这里的问题。提前致谢。

标签: scalaapache-sparkapache-spark-sql

解决方案


你缺少进口

import org.apache.spark.sql.functions._

如果您想使用$然后导入

val spark = SparkSession.builder.master("local[*]").getOrCreate
import spark.implicits._

推荐阅读