Как создать искровой датафрейм с отметкой времени - PullRequest
0 голосов
/ 26 февраля 2019

Как я могу создать этот искровой фрейм данных с типом метки времени за один шаг?Вот как я делаю это в два этапа.Используя spark 2.4

Сначала создайте фрейм данных со строками меток времени

import org.apache.spark.sql.types._
import org.apache.spark.sql.functions.to_timestamp

val eventData = Seq(
  Row(1, "2014/01/01 23:00:01"), 
  Row(1, "2014/11/30 12:40:32"), 
  Row(2, "2016/12/29 09:54:00"), 
  Row(2, "2016/05/09 10:12:43")
)

val schema = StructType(List(
  StructField("typeId", IntegerType, false),
  StructField("eventTimeString", StringType, false)
))

val eventDF = spark.createDataFrame(
  sc.parallelize(eventData),
  schema
)
eventDF.show()

+------+-------------------+
|typeId|    eventTimeString|
+------+-------------------+
|     1|2014/01/01 23:00:01|
|     1|2014/11/30 12:40:32|
|     2|2016/12/29 09:54:00|
|     2|2016/05/09 10:12:43|
+------+-------------------+

Затем преобразуйте строку в метку времени и удалите столбец строки

 val eventTimestampsDF = eventDF
  .withColumn("eventTime", to_timestamp($"eventTimeString", "yyyy/MM/dd k:mm:ss"))
  .drop($"eventTimeString")

Как я могу исключить второй шаг исоздавать временные метки напрямую?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете сделать это следующим образом:

import java.sql.Timestamp
import spark.implicits._

val df = Seq(
  (1, Timestamp.valueOf("2014-01-01 23:00:01")),
  (1, Timestamp.valueOf("2014-11-30 12:40:32")),
  (2, Timestamp.valueOf("2016-12-29 09:54:00")),
  (2, Timestamp.valueOf("2016-05-09 10:12:43"))
).toDF("typeId","eventTime")

Нет необходимости использовать Row объекты и пользовательскую схему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...