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

如何将Spark DataFrame中空单元格及仅含空格的单元格转为Null?

批量转换空/全空格单元格为Null(Spark)

核心思路

利用Spark的trim()函数去除字符串两端空格,若处理后结果为空字符串,则说明原单元格是空值或仅包含空格,此时统一替换为Null;否则保留原内容。这种方式无需针对不同空格数量重复编写判断逻辑。

完整代码示例

首先导入Spark SQL函数:

from pyspark.sql import functions as F

定义示例数据集:

data = [("", "CA", " "), ("Julia", "", None),("Robert", "  ", None), ("Tom", "NJ", "   ")]
df = spark.createDataFrame(data,["name", "state", "code"])
print("原数据集:")
df.show()

执行批量转换:

# 遍历所有列,对每列执行trim判断后替换
df = df.select([
    F.when(F.trim(F.col(c)) == "", None).otherwise(F.col(c)).alias(c) 
    for c in df.columns
])
print("转换后数据集:")
df.show()

结果对比

原数据集输出:

+-------+-----+----+
|   name|state|code|
+-------+-----+----+
|       |   CA|   |
|  Julia|     |null|
| Robert|     |null|
|    Tom|   NJ|   |
+-------+-----+----+

转换后输出:

+-------+-----+----+
|   name|state|code|
+-------+-----+----+
|   null|   CA|null|
|  Julia| null|null|
| Robert| null|null|
|    Tom|   NJ|null|
+-------+-----+----+

补充说明

如果单元格中存在中间含空格但非全空格的有效内容(比如"New York"),trim()只会去除两端空格,不会影响有效内容,因此该方法不会误替换正常数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:05:22