Как преобразовать столбцы типа данных int64 файла паркета в метку времени в кадре данных SparkSQL? - PullRequest
0 голосов
/ 24 января 2019

Здесь мой DataFrame выглядит так:

+----------------+-------------+
|   Business_Date|         Code|
+----------------+-------------+
|1539129600000000|          BSD|
|1539129600000000|          BTN|
|1539129600000000|          BVI|
|1539129600000000|          BWP|
|1539129600000000|          BYB|
+----------------+-------------+

Я хотел преобразовать столбец Business_Date из значения bigint в timestamp при загрузке данных в таблицу кустов.

Как я могу это сделать?

1 Ответ

0 голосов
/ 24 января 2019

Вы можете использовать pyspark.sql.functions.from_unixtime(), что будет

Преобразует количество секунд из эпохи Unix (1970-01-01 00:00:00 UTC) в строкупредставляющая временную метку этого момента в текущем системном часовом поясе в заданном формате.

Похоже, что ваш Business_Date нужно разделить на 1M, чтобы преобразовать в секунды.

Например:

from pyspark.sql.functions import from_unixtime, col

df = df.withColumn(
    "Business_Date",
    from_unixtime(col("Business_Date")/1000000).cast("timestamp")
)
df.show()
#+---------------------+----+
#|Business_Date        |Code|
#+---------------------+----+
#|2018-10-09 20:00:00.0|BSD |
#|2018-10-09 20:00:00.0|BTN |
#|2018-10-09 20:00:00.0|BVI |
#|2018-10-09 20:00:00.0|BWP |
#|2018-10-09 20:00:00.0|BYB |
#+---------------------+----+

from_unixtime возвращает строку, чтобы вы могли преобразовать результат в timestamp.

Теперь новая схема:

df.printSchema()
#root
# |-- Business_Date: timestamp (nullable = true)
# |-- Code: string (nullable = true)
...