2017-02-14 38 views
0

Я пытаюсь научиться искрой, и я читаю dataframe с колонкой временной метки с помощью unix_timestamp функции, как показано ниже:Чтение полной временной метки в dataframe

val columnName = "TIMESTAMPCOL" 
    val sequence = Seq(2016-01-20 12:05:06.999) 
    val dataframe = { 
    sequence.toDF(columnName) 
    } 
    val typeDataframe = dataframe.withColumn(columnName, org.apache.spark.sql.functions.unix_timestamp($"TIMESTAMPCOL")) 
    typeDataframe.show 

Это производит выход:

+------------+ 
|TIMESTAMPCOL| 
+------------+ 
| 1453320306| 
+------------+ 

Как я могу прочитать его, чтобы я не потерял мс, т. Е. Часть .999? Я попытался использовать unix_timestamp(col: Col, s: String), где s - это SimpleDateFormat, например «yyyy-MM-dd hh: mm: ss», без везения.

+0

'date_format' использует Java SimpleDateFormat внутренне, так что вы получите полный рабочий день в милли секунд, а также. возможно дублировать [из] (http://stackoverflow.com/questions/41879125/handling-microseconds-in-spark-scala/41879869#41879869) –

+2

Возможный дубликат [Обработка микросекунд в Spark Scala] (http: // stackoverflow. ком/вопросы/41879125/погрузо-микросекунд-в-искровым Scala) –

ответ

1

Для сохранения миллисекунд используйте формат "yyyy-MM-dd HH:mm:ss.SSS". Вы можете использовать date_format, как показано ниже.

val typeDataframe = dataframe.withColumn(columnName, org.apache.spark.sql.functions.date_format($"TIMESTAMPCOL","yyyy-MM-dd HH:mm:ss.SSS")) 
typeDataframe.show 

Это даст вам

+-----------------------+ 
|TIMESTAMPCOL   | 
+-----------------------+ 
|2016-01-20 12:05:06:999| 
+-----------------------+