【问题标题】:unix_timestamp() function changes hour in scala sparkunix_timestamp() 函数在 scala spark 中更改小时
【发布时间】:2017-10-10 04:57:53
【问题描述】:

我在 unix 中使用 Spark 2.1.0,发现了一个奇怪的问题,即 unix_timestamp 正在更改一个特定时间戳的小时,我创建了一个如下所示的数据框

对于 df2 中的第一条记录,将“20170312020200”作为字符串,我后来将其转换为 df3 中的时间戳,小时数应为 02,但在 df3 中为 03。但是第二条记录在将字符串转换为时间戳时没有问题。

当我在本地系统中使用 Intellij 运行应用程序时,不会发生这种情况。当我们运行我们的应用程序时,这也发生在 spark-submit 中。

【问题讨论】:

    标签: scala dataframe spark-dataframe unix-timestamp


    【解决方案1】:

    2017 年 3 月 12 日凌晨 2:02 在很多时区都不是有效时间。那是夏令时开始的时候,美国的时钟从 1:59:59 跳到了 3:00:00。

    我的猜测是你的本地机器和 spark 集群有不同的系统时区设置。

    【讨论】:

    • 有道理,我的本地系统在 GMT +5.30,服务器在 EDT。
    【解决方案2】:

    我使用的是Spark 2,你可以看到如下结果,你的问题与unix_timestamp或Spark版本无关,请检查你的数据。

    import org.apache.spark.sql.functions.unix_timestamp
    
    val df2 = sc.parallelize(Seq(
          (10, "date", "20170312020200"), (10, "date", "20170312050200"))
        ).toDF("id ", "somthing ", "datee")
    
    df2.show()
    
    val df3=df2.withColumn("datee", unix_timestamp($"datee", "yyyyMMddHHmmss").cast("timestamp"))
    
    
    df3.show()  
    
    
    
    +---+---------+--------------+
    |id |somthing |         datee|
    +---+---------+--------------+
    | 10|     date|20170312020200|
    | 10|     date|20170312050200|
    +---+---------+--------------+
    
    +---+---------+-------------------+
    |id |somthing |              datee|
    +---+---------+-------------------+
    | 10|     date|2017-03-12 02:02:00|
    | 10|     date|2017-03-12 05:02:00|
    +---+---------+-------------------+
    
    import org.apache.spark.sql.functions.unix_timestamp
    df2: org.apache.spark.sql.DataFrame = [id : int, somthing : string ... 1 more field]
    df3: org.apache.spark.sql.DataFrame = [id : int, somthing : string ... 1 more field]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2018-05-06
      • 2020-09-23
      • 1970-01-01
      • 2016-12-02
      相关资源
      最近更新 更多