Pyspark-基于固定日期的date_add并从其他列获取增量

时间:2020-06-09 18:41:00

标签: apache-spark pyspark

我需要添加日期1960-01-01的天数以获得真实的日期值。基于此,我试图做到这一点:

df_immigration_new = df_immigration\
    .withColumn('depdate2', F.col('depdate').cast(T.IntegerType()))\
    .withColumn('depdate', F.date_add(F.to_date('1960-01-01'), F.col('depdate2')))\
    .show(n=1, truncate=False)

但是它给我抛出了一个例外:TypeError: Column is not iterable

如果我将F.col('depdate2')更改为Integer值,则可以使用,但是我不确定如何使用列而不是固定值。

1 个答案:

答案 0 :(得分:1)

使用F.date_add()期望第一个参数为日期,第二个参数为整数,表示要添加到该日期的天数。

您可以使用SQL表达式实现所需的目标:

 df.withColumn("new_Date", F.expr("date_add(to_date('1960-01-01'), number_of_days)")).show()

结果:

+----------+--------------+----------+
|      date|number_of_days|  new_date|
+----------+--------------+----------+
|1960-01-01|             1|1960-01-02|
|1960-01-01|             2|1960-01-03|
+----------+--------------+----------+