【问题标题】:Calculate time between two dates in pyspark计算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)' 需要(数字或日历间隔)类型,而不是日期;"

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

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案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))
      

      【讨论】:

      猜你喜欢
      • 2012-01-31
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 2012-02-13
      • 2021-11-25
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多