编写 Spark 数据帧时用空字符串替换 null
Replace null with empty string when writing Spark dataframe
有没有办法在将 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|
看看这个。你可以 when
和 otherwise
.
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('')
将用 [=15= 替换所有 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|
#+-------------+----------+
有没有办法在将 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|
看看这个。你可以 when
和 otherwise
.
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('')
将用 [=15= 替换所有 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|
#+-------------+----------+