当Spark中的值为空时,如何删除双引号?

时间:2019-02-18 15:42:40

标签: python csv dataframe pyspark

当我使用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   |

如何在注册时删除双引号?

非常感谢您。

5 个答案:

答案 0 :(得分:2)

如果您正在寻找这样做的PySpark方法,请不要尝试使用空字符串技巧!更加简单明了(一旦您知道窍门...)

myDF.coalesce(1).write\
    .option("emptyValue", None)\
    .option("nullValue", None)\
    .csv(outFile)

希望有帮助!找不到任何地方的记录

答案 1 :(得分:1)

根据Spark documentationnullValueemptyValue的默认值为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文件)