Spark Streaming如何仅在新值非空非Null时替换列值
实现方案
你可以通过Spark提供的条件函数实现仅当full_name非空且非Null时替换destination的需求,修改后的代码如下:
.withColumn("destination", when( col("full_name").isNotNull && col("full_name") =!= "", col("full_name") ).otherwise(col("destination")) ) .drop("code", "full_name")
逻辑说明
- 条件判断先通过
col("full_name").isNotNull过滤掉Null值,再通过col("full_name") =!= ""过滤掉空字符串,两个条件都满足时才用full_name的值覆盖原有destination - 不满足条件时走
otherwise分支,直接保留destination列的原始值 - 最后删除冗余的
code和full_name字段即可
如果你不需要额外做空字符串校验,只需要判断非Null,也可以直接用更简洁的coalesce函数实现:
.withColumn("destination", coalesce(col("full_name"), col("destination"))) .drop("code", "full_name")
coalesce会按顺序返回参数中第一个非Null的值,刚好匹配仅full_name非Null时替换的需求。
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

