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

Spark DataFrame中使用正则匹配null值的问题解决

Spark DataFrame Null值处理问题

现有DataFrame

spark_df.show()

# Output
# +----+----+
# |keys|vals|
# +----+----+
# |  k1|   0|
# |  k2|   1|
# |  k3|null|
# +----+----+

现有函数实现

def add_col_by_vals():
   df_with_col = spark_df.withColumn('target_col', get_column())
   return df_with_col 

def get_column():
    return ~f.lower(f.col("vals")).rlike("0|null|None") 

预期结果

df_after_add_col = add_col_by_vals()
df_after_add_col.show()

# Output
# +----+----+----------+
# |keys|vals|target_col|
# +----+----+----------+
# |  k1|   0|     false|
# |  k2|   1|      true|
# |  k3|null|     false|
# +----+----+----------+

实际执行结果

df_after_add_col = add_col_by_vals()
df_after_add_col.show()

# Output
# +----+----+----------+
# |keys|vals|target_col|
# +----+----+----------+
# |  k1|   0|     false|
# |  k2|   1|      true|
# |  k3|null|      null|
# +----+----+----------+

限制条件

仅允许修改get_column函数,完全不能修改原始DataFrame。

解决方案

问题根源在于:当vals为null时,f.lower(f.col("vals"))返回null,后续的rlike操作结果也为null,取反后仍然是null,无法得到预期的false。

方法一:用coalesce处理null值

将null值替换为字符串"null",确保rlike能匹配到规则,取反后得到false:

def get_column():
    return ~f.coalesce(f.lower(f.col("vals")), f.lit("null")).rlike("0|null|None")

方法二:用when/otherwise显式分支处理

直接判断null值并返回false,非null值走原逻辑:

def get_column():
    return f.when(f.col("vals").isNull(), f.lit(False)) \
            .otherwise(~f.lower(f.col("vals")).rlike("0|null|None"))

两种方法都能让null对应的target_col返回false,符合预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:21:32