Python 在写入Spark数据帧时,将null替换为空字符串

Python 在写入Spark数据帧时,将null替换为空字符串,python,apache-spark,pyspark,null,pyspark-dataframes,Python,Apache Spark,Pyspark,Null,Pyspark Dataframes,在将spark dataframe写入文件时,是否有方法将列中的null值替换为空字符串 样本数据: +----------------+------------------+ | UNIQUE_MEM_ID| DATE| +----------------+------------------+ | 1156| null| | 3787| 2016-07-05| |

在将spark dataframe写入文件时,是否有方法将列中的
null
值替换为空字符串

样本数据:

+----------------+------------------+
|   UNIQUE_MEM_ID|              DATE|
+----------------+------------------+
|            1156|              null|
|            3787|        2016-07-05|
|            1156|              null|
|            5064|              null|
|            5832|              null|
|            3787|              null|
|            5506|              null|
|            7538|              null|
|            7436|              null|
|            5091|              null|
|            8673|              null|
|            2631|              null|
|            8561|              null|
|            3516|              null|
|            1156|              null|
|            5832|              null|
|            2631|        2016-07-07|

看看这个。您可以在时执行
,否则执行

    df.show()

    #InputDF
    # +-------------+----------+
    # |UNIQUE_MEM_ID|      DATE|
    # +-------------+----------+
    # |         1156|      null|
    # |         3787|2016-07-05|
    # |         1156|      null|
    # +-------------+----------+


    df.withColumn("DATE", F.when(F.col("DATE").isNull(), '').otherwise(F.col("DATE"))).show()

    #OUTPUTDF
    # +-------------+----------+
    # |UNIQUE_MEM_ID|      DATE|
    # +-------------+----------+
    # |         1156|          |
    # |         3787|2016-07-05|
    # |         1156|          |
    # +-------------+----------+
将上述逻辑应用于dataframe的所有列。当列值为null时,可以使用for循环和遍历列并填充空字符串

 df.select( *[ F.when(F.col(column).isNull(),'').otherwise(F.col(column)).alias(column) for column in df.columns]).show()
对于这种情况,可以使用
.na.fill()
fillna()
函数

示例:

df.show()
#+-------------+----------+
#|UNIQUE_MEM_ID|      DATE|
#+-------------+----------+
#|         1156|      null|
#|         3787|      null|
#|         2631|2016007-07|
#+-------------+----------+
from pyspark.sql.functions import *

df.na.fill('').show()
df.fillna({'DATE':''}).show()
#+-------------+----------+
#|UNIQUE_MEM_ID|      DATE|
#+-------------+----------+
#|         1156|          |
#|         3787|          |
#|         2631|2016007-07|
#+-------------+----------+

这很有效。但是我们可以在不指定每个单独的col的情况下在整个dtafarame上扩展它吗?我认为@shu答案会比我的更快。你可以交叉检查..同样的问题@Shu,如何在所有df上进行缩放columns@ben,如果您有所有字符串列,则
df.na.fill(“”)
将所有列上的
null
替换为
'
,对于int列
df.na.fill(“”).na.fill(0)
null
替换为
0