You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks Scala代码报错:未找到when值,请求协助排查

解决Spark Scala中not found: value when的问题

嗨,作为Databricks新手遇到这个问题很正常!你碰到的not found: value when错误,核心原因是没有导入Spark SQL提供的when内置函数——这个函数不是Scala原生的,属于Spark的函数库,必须显式导入才能使用。

修复步骤:

  1. 导入必要的Spark SQL函数
    在你的代码开头添加这行导入语句,它会导入所有Spark SQL内置函数(包括when):

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

    如果你只想单独导入when,也可以写:

    import org.apache.spark.sql.functions.when
    
  2. 修正withColumn的使用(注意DataFrame的不可变性)
    Spark的DataFrame是不可变数据结构,withColumn这类转换操作会返回一个新的DataFrame,而不是修改原有的。所以你需要把新增列后的结果赋值给一个新变量,否则无法使用新增的列。

完整修正后的代码

// 导入Spark SQL内置函数
import org.apache.spark.sql.functions._

val sv_string = "select * from temp_tbl_ASBReports r left join temp_tbl_ASBInvestigations i on r.nh_parentasbcase = i.nh_asbcaseid"
val df_asbreportssv = spark.sql(sv_string)

// 新增InInvestigation列,赋值给新变量
val df_with_investigation = df_asbreportssv.withColumn(
  "InInvestigation",
  when(col("nh_parentasbcase").isNull, 0).otherwise(1)
)

// 如果你需要字符串类型的0/1,就用引号包裹值:
// val df_with_investigation = df_asbreportssv.withColumn(
//   "InInvestigation",
//   when(col("nh_parentasbcase").isNull, "0").otherwise("1")
// )

额外小提示:

  • 用col("列名")来引用列比df_asbreportssv("列名")更简洁,尤其当DataFrame变量名很长的时候。
  • 如果后续要对InInvestigation做统计(比如求和、计数),建议用数值类型的0和1,而不是字符串类型,这样操作更方便。

内容的提问来源于stack exchange,提问作者user13033419

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:47:57