如何在DataFrame中使用具体时间戳填充无值?

Leo*_*kea 6 apache-spark apache-spark-sql pyspark

我使用 Spark 2.1 和 python 2.7.12。

假设如下:

from pyspark.sql.functions import *
import timestamp

data = [Row(time=datetime.datetime(2017, 1, 1, 0, 0, 0, 0)), Row (time=datetime.datetime(1980, 1, 1, 0, 0, 0, 0)), Row(time=None) ]

df = spark.createDataFrame(data)
Run Code Online (Sandbox Code Playgroud)

如何使用特定时间df.fillna({'time': datetime.datetime(1980, 1, 1, 0, 0, 0, 0)}) 填充null值/秒?

Dan*_*ula 8

您可以尝试coalesce

from pyspark.sql.functions import *
default_time = datetime.datetime(1980, 1, 1, 0, 0, 0, 0)
result = df.withColumn('time', coalesce(col('time'), lit(default_time)))
Run Code Online (Sandbox Code Playgroud)

或者,如果要保留 with fillna,则需要以标准格式将默认值作为字符串传递:

from pyspark.sql.functions import *
default_time = '1980-01-01 00:00:00'
result = df.fillna({'time': default_time})
Run Code Online (Sandbox Code Playgroud)