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

jam*_*iet 2 apache-spark apache-spark-sql pyspark

希望这是相当基本的.我有一个包含Date列的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()
Run Code Online (Sandbox Code Playgroud)

它失败并出现错误:

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

我试过摆弄但却无处可去.我不能认为这太难了.有人可以帮忙吗?

jam*_*iet 6

好吧,想通了

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()
Run Code Online (Sandbox Code Playgroud)

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


Abh*_*ora 5

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

import pyspark.sql.functions as F

df = df.withColumn('daysSince', F.datediff(F.current_date(), df.foo))
Run Code Online (Sandbox Code Playgroud)

  • 所以其他人可以知道:差异以天为单位 https://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.functions.datediff (3认同)