gpt4 book ai didi

python - 填充 Spark 中日期缺失值的优雅方法

转载 作者:行者123 更新时间:2023-12-03 02:42:55 24 4
gpt4 key购买 nike

让我把这个问题分解成一个更小的部分。我在 PySpark 中有一个 DataFrame,其中有一列 arrival_date 采用 date 格式 -

from pyspark.sql.functions import to_date
values = [('22.05.2016',),('13.07.2010',),('15.09.2012',),(None,)]
df = sqlContext.createDataFrame(values,['arrival_date'])

#Following code line converts String into Date format
df = df.withColumn('arrival_date',to_date(col('arrival_date'),'dd.MM.yyyy'))
df.show()
+------------+
|arrival_date|
+------------+
| 2016-05-22|
| 2010-07-13|
| 2012-09-15|
| null|
+------------+

df.printSchema()
root
|-- arrival_date: date (nullable = true)

对 DataFrame 应用大量转换后,我最终希望填写缺失的日期,用 01-01-1900 标记为 null

实现此目的的一种方法是将 arrival_date 列转换为 String,然后以这种方式替换缺失值 - df. fillna('1900-01-01',subset=['arrival_date']) 并最终重新转换此列to_date。这是非常不优雅的。

以下代码行不起作用,如预期的那样,我收到错误 -

df = df.fillna(to_date(lit('1900-01-01'),'yyyy-MM-dd'), subset=['arrival_date'])

文档显示 The value must be of the following type: Int, Long, Float, Double, String, Boolean.

另一种方法是使用 withColumn()when() -

df = df.withColumn('arrival_date',when(col('arrival_date').isNull(),to_date(lit('01.01.1900'),'dd.MM.yyyy')).otherwise(col('arrival_date')))

有没有一种方法可以通过使用某些函数将我选择的日期直接分配给 date 格式的列?

大家有更好的建议吗?

最佳答案

第二种方法应该是这样做的方法,但你不必使用 to_date 在字符串和日期之间进行转换,只需使用 datetime.date(1900, 1, 1) 即可。

import datetime as dt
df = df.withColumn('arrival_date', when(col('arrival_date').isNull(), dt.date(1900, 1, 1)).otherwise(col('arrival_date')))

关于python - 填充 Spark 中日期缺失值的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54180548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com