2016-05-25 14 views
6

Tôi có một khung dữ liệu với các lược đồ sau:Cách lấy ngày và giờ từ chuỗi?

root 

    |-- date : string (nullable = true) 

Giá trị trông giống như 201605250000. Làm thế nào tôi có thể trích xuất ngày, giờ và mm từ chuỗi này?

Trả lời

8

Parse chuỗi:

val unix = unix_timestamp($"date", "yyyyMMddHHmm").alias("unix") 

Convert to timestmap:

val ts = unix.cast("timestamp").alias("ts") 

Cast để date để có được một ngày:

val dt = ts.cast("date").alias("dt") 

Sử dụng hour/minute để có được thời gian:

val h = hour(ts).alias("h") 
val m = minute(ts).alias("m") 

Ví dụ:

import org.apache.spark.sql.functions._ 

val df = Seq((1L, "201605250000")).toDF("id", "date") 
df.select($"*", unix, ts, dt, h, m).show 

// +---+------------+----------+--------------------+----------+---+---+ 
// | id|  date|  unix|     ts|  dt| h| m| 
// +---+------------+----------+--------------------+----------+---+---+ 
// | 1|201605250000|1464127200|2016-05-25 00:00:...|2016-05-25| 0| 0| 
// +---+------------+----------+--------------------+----------+---+---+ 

Note: Đối với 1,5 sử dụng unix.cast("double").cast("timestamp")

Các vấn đề liên quan