代码之家  ›  专栏  ›  技术社区  ›  Joe

PySpark DateDiff函数返回null

  •  0
  • Joe  · 技术社区  · 6 年前

    我正在学习PySpark,并试图找出两次约会的区别。我尝试了多种格式来获得差异,但我的代码总是返回null。任何指点都将不胜感激。

    我尝试将格式转换为unix\u时间戳,

    newdf = df.select('date_str', from_unixtime(unix_timestamp('date_to', 'yyyy-MM-dd')).alias('to'))
    

    下一步是将列强制转换为timestamp或DateType() 我试图创建一个函数

    timeDiff = (F.unix_timestamp('date_to', format=timeFmt)
                - F.unix_timestamp('date_from', format=timeFmt))
    df = df.withColumn("Duration", timeDiff)
    

    下面是我尝试执行的代码

    df = spark.createDataFrame([("2017–05–13"
     ,"2017–05–16"), ("2017–05–13","2017–07–23"), 
     ("2017–05–13","2018–05–13")], ['date_from', 'date_to'])
    
    timeFmt = "yyyy-MM-dd"
    timeDiff = (F.unix_timestamp('date_to', format=timeFmt)
                - F.unix_timestamp('date_from', format=timeFmt))
    df = df.withColumn("Duration", timeDiff)
    
    df.show()
    dfs_5 = df.withColumn('date_diff', F.datediff(F.to_date(df.date_to), F.to_date(df.date_from)))
    dfs_5.show()
    
    newdf = df.select(from_unixtime(unix_timestamp('date_from', 'yyyy-MM-dd')).alias('from'),from_unixtime(unix_timestamp('date_to', 'yyyy-MM-dd')).alias('to'))
    
    newdf.show()
    newdf.withColumn("diff_days", F.datediff("from", "to")).show()
    

    我希望列date\u to和date\u from之间存在差异,但我的代码返回null。

    0 回复  |  直到 6 年前
    推荐文章