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

Databricks Scala中如何从when语句生成结构体数组

解决方案

直接通过array构造结构体数组,结合filter剔除未触发校验规则的空值,替代原来的concat_ws+split方案。

实现代码

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

val resultDF = employees
  .withColumn(
    "record_validity",
    filter(
      array(
        // 规则1:employmentPeriod为负
        when($"employmentPeriod" < 0, 
          struct(
            lit("corrupt").alias("validationCategory"),
            lit("date-negative-period").alias("validationError")
          )
        ),
        // 规则2:入职和离职日期都为空
        when($"deactivationDate".isNull && $"hiredDate".isNull,
          struct(
            lit("corrupt").alias("validationCategory"),
            lit("date-missing").alias("validationError")
          )
        ),
        // 规则3:synthetic_hiredDate为空
        when($"synthetic_hiredDate".isNull,
          struct(
            lit("corrupt").alias("validationCategory"),
            lit("date-deactivated-after-creation").alias("validationError")
          )
        ),
        // 规则4:入职日期为空
        when($"hiredDate".isNull,
          struct(
            lit("corrupt").alias("validationCategory"),
            lit("date-missing-hire-date").alias("validationError")
          )
        ),
        // 规则5:在职状态且无离职日期
        when($"deactivationDate".isNull && $"employment" === "active",
          struct(
            lit("valid").alias("validationCategory"),
            lit("implicit").alias("validationError")
          )
        )
      ),
      // 过滤数组中的null值(未触发的规则会返回null)
      x => x.isNotNull
    )
  )

关键说明

  • 每个when直接返回struct类型,明确指定validationCategory和validationError字段的取值,无需再通过字符串拆分转换。
  • 使用array将所有校验规则的结果打包成数组,再通过filter移除数组中未触发规则产生的null元素,避免无效值混入结果。
  • 相比原方案,这种方式直接构造目标数据结构,避免了字符串拼接和拆分的额外开销,也更符合Spark的类型安全特性。

输出示例

[
  {"validationCategory":"corrupt","validationError":"date-missing"},
  {"validationCategory":"corrupt","validationError":"date-deactivated-after-creation"},
  {"validationCategory":"corrupt","validationError":"date-missing-hire-date"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:39:19