当我使用Spark的df.write.save()方法在S3中注册CSV时,如果值为空,我想删除双引号“”。
火花版本:2.4.0
Python版本:3.6.5
这是我在Python中加载csv文件的代码:
df = spark.read.load(
path('in'),
format = 'csv',
delimiter = '|',
encoding = 'utf-8',
header = 'true'
)
已加载的CSV文件:
|id|first_name|last_name|zip_code|
|1 | |Elsner |57315 |
|2 |Noelle | | |
|3 |James |Moser |48256 |
这是我在Python中编写csv文件的代码:
df.write.save(
path('out'),
format = 'csv',
delimiter = '|',
header = 'true'
)
写入的CSV文件:
|id|first_name|last_name|zip_code|
|1 |"" |Elsner |57315 |
|2 |Noelle |"" |"" |
|3 |James |Moser |48256 |
如何在注册时删除双引号?
非常感谢您。
答案 0 :(得分:2)
如果您正在寻找这样做的PySpark方法,请不要尝试使用空字符串技巧!更加简单明了(一旦您知道窍门...)
myDF.coalesce(1).write\
.option("emptyValue", None)\
.option("nullValue", None)\
.csv(outFile)
希望有帮助!找不到任何地方的记录
答案 1 :(得分:1)
根据Spark documentation,nullValue
和emptyValue
的默认值为None
,这将导致一个空字符串。
可以根据需要将其设置为实际的 nothing ,可以将其设置为Unicode NULL
:
df.write.save(
path('out'),
format = 'csv',
delimiter = '|',
header = True,
nullValue = '\u0000',
emptyValue = '\u0000'
)
答案 2 :(得分:1)
data.write.format(“ csv”)。option(“ delimiter”,“ |”)。option(“ emptyValue”,“”).option(“ nullValue”,“”).option(“ header” ,“ true”)。mode(“ overwrite”)。save(“ C:\ data \ test2”)
答案 3 :(得分:0)
数据框中有空字符串,如果要将它们写为null,则可以将空字符串替换为null,然后在保存时设置nullValues=None
:
df.replace('', None) # replace empty string with null
.write.save(
path('out'),
format='csv',
delimiter='|',
header=True,
nullValue=None # write null value as None
)
它将保存为:
id|first_name|last_name|zip_code
1||Elsner|57315
2|Noelle||
3|James|Moser|48256
答案 4 :(得分:0)
emptyValue=u'\u0000'
(当我尝试不使用前面的u
时,它最终将\u0000
个文学作品写入了csv文件)