【问题标题】:Dataframe- minus minutes from timestamp column数据框-从时间戳列减去分钟
【发布时间】:2017-03-27 06:23:41
【问题描述】:

环境:Spark 1.6;斯卡拉

简单的问题,但我没有得到准确的答案。我有一个数据框 DF

id | cr_date
-----------------------
1| 2017-03-17 11:12:00
----------------------
2|2017-03-17 15:10:00

我需要从 cr_date 减去 5 分钟。我试过了

val DF2= DF.select ($"cr_Date".cast("timestamp").minusMinutes(5)) // 没用

有什么建议吗? 谢谢

【问题讨论】:

    标签: scala datetime apache-spark dataframe jodatime


    【解决方案1】:
    df.select(from_unixtime(unix_timestamp(col("cr_dt")).minus(5 * 60), "YYYY-MM-dd HH:mm:ss"))
    

    spark 中没有这样的minusMinutes 方法。 上面的代码应该返回预期的结果。

    【讨论】:

    • 感谢@undefined_variable,您的代码正在运行,这正是我想要的
    • @Jhon 如果您对答案感到满意,您可以接受它
    • 类似地,我们如何向数据帧添加时间戳?
    • 有 plus 方法可用...如果您正在谈论向数据框添加新列,请使用 withColumn 方法
    • 在 spark 3 中没有 .minus 方法。相反,您必须简单地使用 - 运算符。
    【解决方案2】:

    如果有人遇到同样的问题,我发现使用上述方法可以保持年份。例如,我在申请时有一个时间戳为“2015-01-01 00:00:00”的数据框:

    df.select(from_unixtime(unix_timestamp(col("cr_dt")).minus(5 * 60), "YYYY-MM-dd HH:mm:ss"))
    

    我得到了“2015-12-31 23:55:00”的结果,但我的预期结果是“2014-12-31 23:55:00”。 这似乎是因为有“YYYY”而不是“yyyy”。进行此更改:

    df.select(from_unixtime(unix_timestamp(col("cr_dt")).minus(5 * 60), "yyyy-MM-dd HH:mm:ss"))
    

    给出我正在寻找的结果。

    【讨论】:

    • 出于某种原因,YYYY 模式表示日期的星期几。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2018-03-06
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多