Преобразовать строку даты со столбцом часового пояса в метку времени в искровой шкале - PullRequest
1 голос
/ 18 июня 2019

Мне нужно преобразовать строку (дата с часовым поясом) в метку времени.Преобразованный столбец отметок времени должен иметь то же значение, что и строковое поле.

Есть строковое поле, в котором есть сдвиг даты и времени, я попытался преобразовать его в тип данных отметки времени, он фактически преобразован в формат UTCно я хочу иметь ту же дату и время со смещением, что и у типа данных timestamp.

Seq("2019-02-05T18:59:11.0874121+05:30").toDF("date_str")
.select($"date_str")
.withColumn("date_timestamp",$"date_str".cast("timestamp"))
.show(false)

Я ожидаю, что столбец date_timestamp должен иметь "2019-02-05T18:59:11.0874121+05:30", но фактически он конвертируется в формат UTC "2019-02-05T13:29:11.087+0000".

1 Ответ

1 голос
/ 18 июня 2019

Я использую udf для преобразования строк в метки времени без каких-либо изменений.

import java.text.SimpleDateFormat
import java.sql.Timestamp

val convertToTimestamp= (logTimestamp: String) => {
  try {
    // change the date format as needed
    val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss','SSS")
    val theDate = sdf.parse(logTimestamp)
    new Timestamp(theDate.getTime)
  } catch {
    case _: Exception => null
  }
}

//register for sql
sqlContext.udf.register("convertToTimestamp", convertToTimestamp)
//register for scala 
def convertToTimestampUDF = udf(convertToTimestamp)

val newDfWithTimeStamp = oldDfWithString.select(convertToTimestampUDF($"date_timestamp ").alias("date_timestamp "))
...