【发布时间】:2020-10-04 19:49:34
【问题描述】:
我正在创建一个数据框并对特定列的数据进行一些修改。
修改要求 -
- 如果有任何行/数据具有 NULL 值,则将其替换为“未知”(字符串类型)。
所以我的代码 -
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(") & $"" 但其中任何一个都不起作用。
我遇到了这样的错误 - (在图片中,它是 RED COLORED )
- 使用
withColumn("<column_name>",when (col("<column_name>").isNull,"unknown").otherwise("<column_name>"))THEN 时,错误为 -Cannot resolve symbol when、Cannot resolve symbol col等。- 使用
withColumn("<column_name>",when ($"<column_name>".isNull,"unknown).otherwise("<column_name>"))THEN 时,错误为-Cannot resolve symbol when、value$is not a member of StringContext
- 使用
请帮我找出这里的问题。提前致谢。
【问题讨论】:
标签: scala apache-spark apache-spark-sql