Преобразовать строковое значение в кадре данных в метку времени и сохранить в Hive - PullRequest
0 голосов
/ 08 мая 2018

Я читаю записи вызовов из файла и преобразую их в столбцы в кадре данных. Как я могу преобразовать столбец со строковым значением, которое на самом деле является отметкой времени в формате «ггггммддччММсс», до отметки времени перед сохранением этого кадра данных в таблицу кустов? Я использовал фрагмент ниже, но я получаю нулевое значение в таблице улья. Как я понимаю, я должен указать формат, т. Е. "YyyymmddhhMMss", в котором существуют строковые значения. Но не уверен, как это сделать. Я использую свечу 2.1.1

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

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы можете использовать 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))
0 голосов
/ 08 мая 2018

Для преобразования строкового значения из кадра данных в метку времени вы можете использовать функцию to_timestamp, доступную в пакете org.apache.spark.sql.functions.Например:

Для 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"))

Itдаст вам следующий вывод:

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

Надеюсь, это поможет!

...