Как я могу разделить метку времени на дату и время? - PullRequest
0 голосов
/ 16 января 2020
//loading DF
 val df1 = spark.read.option("header",true).option("inferSchema",true).csv("time.csv ")
//
+-------------+
|    date_time|
+-----+-------+
|1545905416000|
+-----+-------+

, когда я использую приведение, чтобы изменить значение столбца на DateType, оно показывает ошибку

=> the datatype is not matching (date_time : bigint)in df 
df1.withColumn("date_time", df1("date").cast(DateType)).show()

Любое решение для ее решения ???

Я пытался сделать

val a = df1.withColumn("date_time",df1("date").cast(StringType)).drop("date").toDF()
a.withColumn("fomatedDateTime",a("date_time").cast(DateType)).show()

но это не работает.

1 Ответ

0 голосов
/ 17 января 2020

Добро пожаловать в StackOverflow!

Вам необходимо преобразовать отметку времени из формата эпохи в дату, а затем выполнить вычисления. Вы можете попробовать это:

import spark.implicits._

val df = spark.read.option("header",true).option("inferSchema",true).csv("time.csv ")

val df1 = df.withColumn(
                "dateCreated",
                date_format(
                    to_date(
                        substring(
                            from_unixtime($"date_time".divide(1000)), 
                            0,
                            10
                        ),
                        "yyyy-MM-dd"
                    )
                ,"dd-MM-yyyy")
            )
            .withColumn(
                "timeCreated",
                substring(
                    from_unixtime($"date_time".divide(1000)), 
                    11,
                    19
                )
            )

Пример данных из моего сценария использования:

+---------+-------------+--------+-----------+-----------+
|     adId|    date_time|   price|dateCreated|timeCreated|
+---------+-------------+--------+-----------+-----------+
|230010452|1469178808000|  5950.0| 22-07-2016|   14:43:28|
|230147621|1469456306000| 19490.0| 25-07-2016|   19:48:26|
|229662644|1468546792000| 12777.0| 15-07-2016|   07:09:52|
|229218611|1467815284000|  9996.0| 06-07-2016|   19:58:04|
|229105894|1467656022000|  7700.0| 04-07-2016|   23:43:42|
|230214681|1469559471000|  4600.0| 27-07-2016|   00:27:51|
|230158375|1469469248000|   999.0| 25-07-2016|   23:24:08|
+---------+-------------+--------+-----------+-----------+

Вам необходимо настроить время. По умолчанию это будет ваш часовой пояс. Для меня это GMT +05:30. Надеюсь, это поможет.

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