Подтвердить что ты не робот

Как преобразовать временную метку unix на сегодняшний день в Spark

У меня есть кадр данных с столбцом временной метки unix (например, 1435655706000), и я хочу преобразовать его в данные с форматом 'yyyy-MM-DD', я пробовал nscala-time, но это не так работа.

val time_col = sqlc.sql("select ts from mr").map(_(0).toString.toDateTime)
time_col.collect().foreach(println)

и я получил ошибку: java.lang.IllegalArgumentException: Недопустимый формат: "1435655706000" имеет неправильный формат "6000"

4b9b3361

Ответ 1

Так как spark1.5, для этого есть встроенный UDF.

val df = sqlContext.sql("select from_unixtime(ts,'YYYY-MM-dd') as `ts` from mr")

Для получения дополнительной информации просмотрите Spark 1.5.2 API Doc.

Ответ 2

import org.joda.time.{DateTimeZone}
import org.joda.time.format.DateTimeFormat

Вам нужно импортировать следующие библиотеки.

val stri = new DateTime(timeInMillisec).toDateTime.toString("yyyy/MM/dd")

Или приспособиться к вашему делу:

 val time_col = sqlContext.sql("select ts from mr")
                     .map(line => new DateTime(line(0).toInt).toDateTime.toString("yyyy/MM/dd"))

Может быть другой способ:

  import com.github.nscala_time.time.Imports._

  val date = (new DateTime() + ((threshold.toDouble)/1000).toInt.seconds )
             .toString("yyyy/MM/dd")

Надеюсь, что это поможет:)

Ответ 3

Вам не нужно преобразовывать в String перед применением toDataTime с помощью nscala_time

import com.github.nscala_time.time.Imports._

scala> 1435655706000L.toDateTime
res4: org.joda.time.DateTime = 2015-06-30T09:15:06.000Z

`

Ответ 4

Здесь используются функции Scala DataFrame: from_unix_time и to_date

// NOTE: divide by 1000 required if milliseconds
// e.g. 1446846655609 -> 2015-11-06 21:50:55 -> 2015-11-06 
mr.select(to_date(from_unixtime($"ts" / 1000))) 

Ответ 5

Я решил эту проблему, используя библиотеку joda-time путем сопоставления DataFrame и преобразования DateTime в строку:

import org.joda.time._
val time_col = sqlContext.sql("select ts from mr")
                         .map(line => new DateTime(line(0)).toString("yyyy-MM-dd"))