我有一個名為createdtime的列,幾乎沒有空值。我只希望它用當前時間戳填充那些空值。
我已經嘗試了下面的一段代碼,我手動分配時間,我希望它以這樣一種方式,每當我運行這段代碼時,它應該獲取 current_timestamp()
from pyspark.sql.functions import *
default_time = '2022-06-28 05:07:29.077'
df = df.fillna({'createdtime': default_time})
我嘗試了以下方法,但給出了錯誤:TypeError: Column is not iterable。
from pyspark.sql.functions import *
default_time = current_timestamp()
df = df.fillna({'createdtime': default_time})
錯誤截圖:
uj5u.com熱心網友回復:
default_time
變數需要用引號括起來。
default_time = '2022-06-28 05:07:29.077'
df = df.fillna({'createdtime': f'{default_time}'})
或使用該coalesce
功能。
df = df.withColumn('createdtime', F.coalesce('createdtime', F.current_timestamp()))
uj5u.com熱心網友回復:
因為 fillna 接受字串而不是列,所以您可以使用下面的代碼
import datetime
df.fillna({"dt_service":str(datetime.datetime.utcnow())})
uj5u.com熱心網友回復:
您不能將 current_timestamp() 傳遞給它的變數,fillna 接受 int、float、double 或 string 值。
您可以使用 python 庫傳遞當前時間戳
下面是作業代碼
>>> df.show()
--------- ------ ----- ----------
|school_id|gender|class| doj|
--------- ------ ----- ----------
| 1| M| 9|01/01/2020|
| 1| M| 10|01/03/2018|
| 1| F| 10|01/04/2018|
| 2| M| 9| null|
| 2| F| 10| null|
--------- ------ ----- ----------
>>> from datetime import datetime
>>> now = datetime.now()
>>> dt_string = now.strftime("%d-%m-%Y %H:%M:%S")
>>> df.fillna(value=dt_string,subset=['doj']).show()
--------- ------ ----- -------------------
|school_id|gender|class| doj|
--------- ------ ----- -------------------
| 1| M| 9| 01/01/2020|
| 1| M| 10| 01/03/2018|
| 1| F| 10| 01/04/2018|
| 2| M| 9|28-06-2022 13:22:10|
| 2| F| 10|28-06-2022 13:22:10|
--------- ------ ----- -------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497466.html