在将spark数据帧写入文件时,是否有方法将列中的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|
看看这个。可以使用CCD_ 2和CCD_。
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| |
# +-------------+----------+
将上述逻辑应用于数据帧的所有列。您可以使用for循环和遍历列,并在列值为null时填充空字符串。
df.select( *[ F.when(F.col(column).isNull(),'').otherwise(F.col(column)).alias(column) for column in df.columns]).show()
在这种情况下使用.na.fill()
或fillna()
函数。
- 如果您有所有
string
列,则df.na.fill('')
将在所有列上用''
替换所有null - 对于
int
列df.na.fill('').na.fill(0)
,将null替换为0
- 另一种方法是为列创建
dict
并替换值df.fillna({'col1':'replacement_value',...,'col(n)':'replacement_value(n)'})
Example:
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|
#+-------------+----------+