如何在PySpark读取CSV文件时正确使用emptyValue参数?
正确区分CSV中的NULL值与空字符串
要实现CSV中空字段解析为NULL、指定字符串(如emptyStr)解析为空字符串的需求,需正确配置PySpark CSV数据源的nullValue和emptyValue参数:
参数作用说明
nullValue:定义CSV中代表NULL值的标记,读取时匹配该标记的字段会被解析为NULL;写入时NULL值会转为该标记字符串。emptyValue:定义CSV中代表空字符串的标记,读取时匹配该标记的字段会被解析为空字符串;写入时空字符串会转为该标记字符串。
正确代码示例
with open("/dbfs/tmp/c.csv", "w") as f: f.write('''id,val 1, 2,emptyStr 3,str1 ''') # 配置双参数读取CSV df = spark.read.csv( 'dbfs:/tmp/c.csv', header=True, nullValue='', emptyValue='emptyStr' ) print(df.collect())
执行结果
[Row(id='1', val=None), Row(id='2', val=''), Row(id='3', val='str1')]
原因解释
默认情况下,Spark会将CSV中的空字段直接解析为NULL,但不会自动将特定字符串转为空字符串。通过显式配置:
nullValue='':确保原CSV中的空字段(无内容的列)仍被解析为NULLemptyValue='emptyStr':指定emptyStr字符串被解析为空字符串
这样就能同时区分NULL值和空字符串,满足需求。
内容的提问来源于stack exchange,提问作者Kashyap
相关产品推荐
相关产品推荐

