如何在PySpark中读取CSV文件的空字符串与NULL值?
PySpark读取CSV时区分空字符串与NULL值的问题
需要在PySpark中读取包含无内容字段与**空字符串("")**的CSV文件,目标是将无内容的字段识别为NULL,将""识别为空字符串。但尝试nullValue=None、emptyValue=""等多种参数组合后,所有情况均将两者识别为NULL。
测试代码与结果
测试代码如下:
with open("/dbfs/tmp/c.csv", "w") as f: f.write('''id,val 1, 2,"" 3,str1 ''') for e, n in [('', None), ('', ''), (None, None), (None, '')]: print(f'e: "{e}", n: "{n}"') df = spark.read.csv('dbfs:/tmp/c.csv', header=True, emptyValue=e, nullValue=n).show()
测试结果显示,所有参数组合均将CSV中无内容的字段(如第一行的val列)和带双引号的空字符串(第二行的val列)都识别为NULL,无法区分两者。
Scala对比验证
在Scala中使用对应配置可正常区分两种情况:
spark.read .option("header", "true") .option("emptyValue", "") .option("nullValue", null) .csv("dbfs:/tmp/c.csv").show()
该代码能正确将无内容字段识别为NULL,将""识别为空字符串。
已查阅的相关资料
- Spark官方CSV数据源文档中关于
emptyValue和nullValue参数的定义 - 社区讨论中关于Spark读取分区文件时空字符串被转为NULL的问题
- Databricks社区中关于读取CSV空白值的配置方案
内容的提问来源于stack exchange,提问作者Kashyap
相关产品推荐
相关产品推荐

