【问题标题】:Pyspark: Convert Column from String Type to Timestamp TypePyspark:将列从字符串类型转换为时间戳类型
【发布时间】:2019-02-01 20:31:19
【问题描述】:

我一直在使用 pyspark 2.3。我有一个数据框,其中包含 DateTime 值的字符串格式的“时间”列。列的样子:

+---------------+
|           TIME|
+---------------+
| 2016/04/14 190|
| 2016/04/15 180|
|2016/04/14 1530|
|2016/04/16 1530|
| 2016/04/17 160|
+---------------+

1901530 中的前两位数字表示小时,其余为分钟。 我尝试使用以下几行将其转换为时间戳类型:

df.withColumn('TIME_timestamp',fn.unix_timestamp('TIME','yyyy/MM/dd HHMM').cast(TimestampType()))

还有:

df.withColumn('TIME_timestamp', fn.to_timestamp("TIME", 'yyyy/MM/dd HHMM'))

但结果是:

+---------------+-------------------+
|           TIME|     TIME_timestamp|
+---------------+-------------------+
| 2016/04/14 190|               null|
| 2016/04/15 180|               null|
|2016/04/14 1530|               null|
|2016/04/16 1530|               null|
| 2016/04/17 160|               null|
+---------------+-------------------+

所以所需的 Dataframe 应该如下所示:

+---------------+
| TIME_timestamp|
+---------------+
| 16-04-15 19:00|
| 16-04-15 18:00|
| 16-04-15 15:30|
| 16-04-15 15:30|
| 16-04-15 16:00|
+---------------+

【问题讨论】:

    标签: casting pyspark unix-timestamp


    【解决方案1】:

    您使用大写字母M 来识别月份和分钟;会议记录应以m 标识,参见here。下面给出了一个使用to_timestamp 的工作示例,希望对您有所帮助!

    import pyspark.sql.functions as F
    
    df = sqlContext.createDataFrame(
        [
         ('2016/04/14 190',),
         ('2016/04/15 180',),
         ('2016/04/14 1530',),
         ('2016/04/16 1530',),
         ('2016/04/17 160',)
        ],
        ("TIME",)
    )
    
    df.withColumn('TIME_timestamp',F.to_timestamp("TIME", "yyyy/MM/dd HHmm")).show()
    

    输出:

    +---------------+-------------------+
    |           TIME|     TIME_timestamp|
    +---------------+-------------------+
    | 2016/04/14 190|2016-04-14 19:00:00|
    | 2016/04/15 180|2016-04-15 18:00:00|
    |2016/04/14 1530|2016-04-14 15:30:00|
    |2016/04/16 1530|2016-04-16 15:30:00|
    | 2016/04/17 160|2016-04-17 16:00:00|
    +---------------+-------------------+
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2021-11-19
      • 2020-07-25
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多