是否有任何pyspark函数可以在下个月添加,例如DATE_ADD(date,month(int type))

时间:2016-12-27 08:52:35

标签: python apache-spark pyspark pyspark-sql

我是spark的新手,是否有任何内置功能,将显示从当前日期开始的下个月日期,如今天是27-12-2016,那么该功能将返回27-01-2017。我使用了date_add()但没有添加月份的功能。我已经尝试过date_add(日期,31),但如果这个月有30天会怎么样。

spark.sql("select date_add(current_date(),31)") .show()

任何人都可以帮我解决这个问题。我需要为此编写自定义函数吗?因为我还没有找到任何内置代码 提前致谢 格利扬

2 个答案:

答案 0 :(得分:1)

这不是pyspark特定的。您可以使用add_months。它可以从 Spark 1.5 开始使用。例如:

spark.sql("select current_date(), add_months(current_date(),1)").show()
# +--------------+-----------------------------+
# |current_date()|add_months(current_date(), 1)|
# +--------------+-----------------------------+
# |    2016-12-27|                   2017-01-27|
# +--------------+-----------------------------+

您还可以使用负整数删除月份:

spark.sql("select current_date(), add_months(current_date(),-1) as last_month").show()
# +--------------+----------+
# |current_date()|last_month|
# +--------------+----------+
# |    2016-12-27|2016-11-27|
# +--------------+----------+

答案 1 :(得分:1)

我发现用于添加/减去月份的最直接的数据帧友好型解决方案

from pyspark.sql import functions as F
# assume df has "current_date" column as type DateType
months_to_add = 1  # int value, could be negative
df = df.withColumn("new_date", F.add_months("current_date", months_to_add))

此结果将包含以前包含在df。

中的任何其他列