【问题标题】:Convert a String value in dataframe to timestamp and Store in Hive将数据帧中的字符串值转换为时间戳并存储在 Hive 中
【发布时间】:2018-10-18 05:28:54
【问题描述】:

我正在从文件中读取通话记录并将它们转换为数据框中的列。在将该数据帧保存到配置单元表之前,如何将具有字符串值的列(实际上是格式为“yyyymmddhhMMss”的时间戳)转换为时间戳? 我在 sn-p 下面使用,但我在 hive 表中得到空值。据我了解,我必须指定存在字符串值的格式,即“yyyymmddhhMMss”。但不知道该怎么做。我正在使用火花 2.1.1

val df2 = df.withColumn("originTimeStamp",$"originTimeStamp".cast("timestamp")

【问题讨论】:

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


    【解决方案1】:

    要将字符串值从数据帧转换为时间戳,您可以使用org.apache.spark.sql.functions 包中的to_timestamp 函数。像这样:

    适用于 Spark 2.2 及更高版本

    val df2 = df.withColumn("originTimeStamp",to_timestamp($"originTimeStamp", "yyyymmddhhMMss"))
    

    适用于 Spark 2.1 及以下版本

    val df2 = df.withColumn("originTimeStamp",unix_timestamp($"originTimeStamp", "yyyymmddhhMMss").cast("timestamp"))
    

    它会给你以下输出:

    +-------------------+
    |    originTimeStamp|
    +-------------------+
    |2017-01-07 10:06:00|
    +-------------------+
    

    希望对你有帮助!

    【讨论】:

    • 问题是 to_timestamp 在 spark 2.1.1 中不可用。唯一可用的函数是 to_utc_timestamp。有什么出路吗?
    【解决方案2】:

    你可以像下面这样使用 unix_timestamp

    import org.apache.spark.sql.types._
    val df2 = Seq((1, "20180508022659")).toDF("id", "originTimeStamp")
    df2.withColumn("originTimeStamp", unix_timestamp($"originTimeStamp", "yyyyMMddHHmmss").cast(TimestampType))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多