У меня есть фрейм данных с колонной метку времени Unix(например.1435655706000), и я хочу, чтобы преобразовать его в данные формата 'гггг-ММ-ДД' Я'пробовала nscala времени, но это вовсе'т работу.
в
val time_col = sqlc.sql("select ts from mr").map(_(0).toString.toDateTime)
time_col.collect().foreach(println)
и я получил ошибку: Ява.яз.IllegalArgumentException: недопустимый формат: "в 1435655706000" это неправильно сформированных на "6000"и
С spark1.5 , есть встроенные ОДС за это.
val df = sqlContext.sql("select from_unixtime(ts,'YYYY-MM-dd') as `ts` from mr")
Пожалуйста, проверьте Искра 1.5.2 по API док для получения дополнительной информации.
Здесь он с помощью функции Скала таблицы данных: from_unixtime и даты
// 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)))
в
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")
Надеюсь, что это помогает :)
Вы needn'т преобразовать в строку перед применением toDataTime с nscala_time
импортировать com.на GitHub.nscala_time.время.Импорт._
scala> 1435655706000L.toDateTime
res4: org.joda.time.DateTime = 2015-06-30T09:15:06.000Z
`
Я решил эту проблему с помощью Joda времени библиотека путем сопоставления в таблицы данных и преобразования Датавремя
в строку :
в
import org.joda.time._
val time_col = sqlContext.sql("select ts from mr")
.map(line => new DateTime(line(0)).toString("yyyy-MM-dd"))
Что вы можете сделать, это:
input.withColumn("time", concat(from_unixtime(input.col("COL_WITH_UNIX_TIME")/1000,
"yyyy-MM-dd'T'HH:mm:ss"), typedLit("."), substring(input.col("COL_WITH_UNIX_TIME"), 11, 3),
typedLit("Z")))
где время новое имя столбца и COL_WITH_UNIX_TIME-это имя столбца, который вы хотите конвертировать. Это даст сведения в миллисе, что делает ваши данные более точные, такие как: в "гггг-ММ-ДД'Т'чч:мм:СС.СНО'з'"
в
Вы можете использовать следующий синтаксис в Java
input.select("timestamp)
.withColumn("date", date_format(col("timestamp").$div(1000).cast(DataTypes.TimestampType), "yyyyMMdd").cast(DataTypes.IntegerType))