簡體   English   中英

寫入Spark時將null替換為空串 dataframe

[英]Replace null with empty string when writing Spark dataframe

將 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|

看一下這個。 你可以whenotherwise時間。

    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 的所有列。您可以使用 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|
#+-------------+----------+

如果列由數組類型組成怎么辦? 我們如何 na.fill 一個數組類型?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM