如何将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
相关产品推荐
相关产品推荐

