[spark][scala][dataframe][withcolumn]在withcolumn中使用“when”时无法解析符号“when”

fv2wmkja  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(712)

我正在创建一个dataframe并对特定列的数据应用一些修改。
修改要求-
如果有任何行/数据的值为空,则将其替换为“未知”(字符串类型)。
所以我的密码-

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

函数readfrmdatabasequery:string & 配置:将[string,string]Map为参数并返回Dataframe。示例-

@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(“)&$”,但它们都不起作用。
我得到了这样的错误-(在图片中,它是红色的)

使用时 withColumn("<column_name>",when (col("<column_name>").isNull,"unknown").otherwise("<column_name>")) 那么,错误是- Cannot resolve symbol when , Cannot resolve symbol col 等等等等。
使用时 withColumn("<column_name>",when ($"<column_name>".isNull,"unknown).otherwise("<column_name>")) 那么,错误是- Cannot resolve symbol when , value $ is not a member of StringContext 请帮我找出问题所在。提前谢谢。

0h4hbjxa

0h4hbjxa1#

您缺少导入

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

如果你想用 $ 然后导入

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

相关问题