【问题标题】:How to change the column type from String to Date in DataFrames?如何在 DataFrames 中将列类型从 String 更改为 Date?
【发布时间】:2016-08-25 04:27:49
【问题描述】:

我有一个数据框,它有两列(C、D)被定义为字符串列类型,但列中的数据实际上是日期。例如,C 列的日期为“01-APR-2015”,D 列的日期为“20150401”,我想将这些更改为日期列类型,但我没有找到这样做的好方法。我看看堆栈溢出我需要在 Spark SQL 的 DataFrame 中将字符串列类型转换为日期列类型。日期格式可以是“01-APR-2015”,我查看了this post,但它没有与日期相关的信息

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    火花 >= 2.2

    你可以使用to_date:

    import org.apache.spark.sql.functions.{to_date, to_timestamp}
    
    df.select(to_date($"ts", "dd-MMM-yyyy").alias("date"))
    

    to_timestamp:

    df.select(to_date($"ts", "dd-MMM-yyyy").alias("timestamp"))
    

    与中间 unix_timestamp 通话。

    火花

    从 Spark 1.5 开始,您可以使用 unix_timestamp 函数将字符串解析为长字符串,将其转换为时间戳并截断 to_date

    import org.apache.spark.sql.functions.{unix_timestamp, to_date}
    
    val df = Seq((1L, "01-APR-2015")).toDF("id", "ts")
    
    df.select(to_date(unix_timestamp(
      $"ts", "dd-MMM-yyyy"
    ).cast("timestamp")).alias("timestamp"))
    

    注意

    根据您的 Spark 版本,由于SPARK-11724,这可能需要进行一些调整:

    从整数类型转换为时间戳将源 int 视为以毫秒为单位。从时间戳转换为整数类型会在几秒钟内创建结果。

    如果您使用未打补丁的版本 unix_timestamp 输出需要乘以 1000。

    【讨论】:

    • 我的编辑已被拒绝,但我很确定您的第一个导入行中缺少“}”,并且您在第 7 行写了“to_date”而不是“to_timestamp”
    • 收到错误 - <console>:28: error: too many arguments for method to_date: (e: org.apache.spark.sql.Column)org.apache.spark.sql.Column
    猜你喜欢
    • 2017-10-27
    • 2018-06-03
    • 2015-11-23
    • 2017-09-07
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2014-02-23
    • 2011-02-05
    相关资源
    最近更新 更多