计算pyspark中两个日期之间的时间

Posted

技术标签:

【中文标题】计算pyspark中两个日期之间的时间【英文标题】:Calculate time between two dates in pyspark 【发布时间】:2017-02-15 22:05:27 【问题描述】:

希望这是相当基本的。我有一个包含日期列的 Spark 数据框,我想添加一个新列,其中包含自该日期以来的天数。 Google fu 让我失望了。

这是我尝试过的:

from pyspark.sql.types import *
import datetime
today = datetime.date.today()

schema = StructType([StructField("foo", DateType(), True)])
l = [(datetime.date(2016,12,1),)]
df = sqlContext.createDataFrame(l, schema)
df = df.withColumn('daysBetween',today - df.foo)
df.show()

失败并出现错误:

u"由于数据类型不匹配,无法解析 '(17212 - foo)':'(17212 - foo)' 需要(数字或日历间隔)类型,而不是日期;"

我试过摆弄,但一无所获。我不能认为这太难了。有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

好的,明白了

from pyspark.sql.types import *
import pyspark.sql.functions as funcs
import datetime
today = datetime.date(2017,2,15)

schema = StructType([StructField("foo", DateType(), True)])
l = [(datetime.date(2017,2,14),)]
df = sqlContext.createDataFrame(l, schema)
df = df.withColumn('daysBetween',funcs.datediff(funcs.lit(today), df.foo))
df.collect()

返回[Row(foo=datetime.date(2017, 2, 14), daysBetween=1)]

【讨论】:

【参考方案2】:

您可以简单地执行以下操作:

import pyspark.sql.functions as F

df = df.withColumn('daysSince', F.datediff(F.current_date(), df.foo))

【讨论】:

所以其他人可以知道:差异以天为单位spark.apache.org/docs/2.1.0/api/python/…

以上是关于计算pyspark中两个日期之间的时间的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark - 按两个日期列分组的 UDAF 函数,UDAF 用于计算实际值和预测值之间的 RMSE

Pyspark:两个日期之间的差异(Cast TimestampType,Datediff)

PySpark SQL 中的日期之间的差异

在pyspark数据框中的两个日期之间生成每月时间戳

计算 Pyspark 中发生条件时两个事件之间的月数

在 PySpark 中使用日期滚动连接?