Python 在写入Spark数据帧时,将null替换为空字符串
在将spark dataframe写入文件时,是否有方法将列中的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| |
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
。