Интерпретировать поля меток времени в Spark при чтении JSON - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь прочитать симпатичный печатный json, в котором есть временные поля.Я хочу интерпретировать столбцы меток времени как поля меток времени при чтении самого json.Тем не менее, он все еще читает их как строку, когда я printSchema

Например, введите json файл -

[{
    "time_field" : "2017-09-30 04:53:39.412496Z"
}]

Код -

df = spark.read.option("multiLine", "true").option("timestampFormat","yyyy-MM-dd HH:mm:ss.SSSSSS'Z'").json('path_to_json_file')

Вывод df.printSchema() -

root
 |-- time_field: string (nullable = true)

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 10 декабря 2018

Мой собственный опыт работы с опцией timestampFormat заключается в том, что она не работает так, как рекламируется.Я просто прочитал бы поля времени как строки и использовал бы to_timestamp для выполнения преобразования, как показано ниже (со слегка обобщенным примером ввода):

# /path/to/jsonfile
[{
    "id": 101, "time_field": "2017-09-30 04:53:39.412496Z"
},
{
    "id": 102, "time_field": "2017-10-01 01:23:45.123456Z"
}]

В Python:

from pyspark.sql.functions import to_timestamp

df = spark.read.option("multiLine", "true").json("/path/to/jsonfile")

df = df.withColumn("timestamp", to_timestamp("time_field"))

df.show(2, False)
+---+---------------------------+-------------------+
|id |time_field                 |timestamp          |
+---+---------------------------+-------------------+
|101|2017-09-30 04:53:39.412496Z|2017-09-30 04:53:39|
|102|2017-10-01 01:23:45.123456Z|2017-10-01 01:23:45|
+---+---------------------------+-------------------+

df.printSchema()
root
 |-- id: long (nullable = true)
 |-- time_field: string (nullable = true)
 |-- timestamp: timestamp (nullable = true)

В Scala:

val df = spark.read.option("multiLine", "true").json("/path/to/jsonfile")

df.withColumn("timestamp", to_timestamp($"time_field"))
...