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



在将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
  • 对于intdf.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|
#+-------------+----------+

相关内容

  • 没有找到相关文章

最新更新