这里使用when子句有什么问题

kzmpq1sx  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(306)

有如下场景:

val df = // dataset have columns like "col", "col_a",  "col_b".
  val  type = "" //dynamicLLT passed by user 
 //based on this, need to add one more colum "value" based "col" value.

 val valueDs =  df
        .withColumn("type", lit(type).cast(StringType))
         .withColumn("value", 
                 when(col("cal").equalTo(lit("A_B")),concat_ws("_",col("col_a"), col("col_b"))).
                 when(col("cal").equalTo(lit("A")),concat(col("col_a")))
                );

需要根据“类型”选择其他列,并适当填充“值”列。
但是当我运行“”列(“cal”)。==(“a“)”如果由于字段“col\u b”不可用而失败。
那么这里怎么了?为什么它要找不在那里的“col\u b”。如何修复when子句。

esbemjvw

esbemjvw1#

你能试试下面吗。

val valueDs =  df
        .withColumn("type", lit(type).cast(StringType))
         .withColumn("value", 
                 when((col("cal") === "A_B"),concat_ws("_",col("col_a"), col("col_b"))).
                 when((col("cal") === "A"),concat(col("col_a")))
                .otherwise("null")
         );

相关问题