spark read.csv неправильно анализирует временные метки - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть файл csv presence.csv в моем файле данных:

TIME,RESULT,PARENTLOCALIZATIONCODE,PARENTNAME,SIGFOXID,STATUS
2018-12-10T00:06:14.5464070Z,OK,A,A,19A9BC,OFF_PERIOD

Я пытался прочитать его, но вывод столбца TIME неверен:

data = sqlContext.read.csv(
    'presence.csv',
    header='true', 
    inferSchema= 'true',  
    sep=","
)

data.show(truncate=False)
+----------------------+------+----------------------+----------+--------+----------+
|TIME                  |RESULT|PARENTLOCALIZATIONCODE|PARENTNAME|SIGFOXID|STATUS    |
+----------------------+------+----------------------+----------+--------+----------+
|2018-12-10 01:37:18.07|OK    |A                     |A         |19A9BC  |OFF_PERIOD|
+----------------------+------+----------------------+----------+--------+----------+

Я первыйЯ думал о разнице во времени между моим сервером и временем gmt, но один равен 00:06:14, а другой - 01:37:18, так что разница 01:31 просто странная.

У вас есть идеи, почему происходит это преобразование?

1 Ответ

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

Из документов для pyspark.sql.DataFrameReader.csv значение по умолчанию timestampFormat равно:

Основная проблема с вашими данными заключается в том, что у вас есть 3 дополнительных значения в доли секунды.Поэтому для этих данных вам нужно использовать timestampFormat="yyyy-MM-dd'T'hh:mm:ss:SSSSSSZZ"

data = spark.read.csv(
    'presence.csv',
    header='true', 
    inferSchema= 'true',  
    sep=",",
    timestampFormat="yyyy-MM-dd'T'hh:mm:ss:SSSSSSZZ"
)

data.show(truncate=False)
#+-----------------------+------+----------------------+----------+--------+----------+
#|TIME                   |RESULT|PARENTLOCALIZATIONCODE|PARENTNAME|SIGFOXID|STATUS    |
#+-----------------------+------+----------------------+----------+--------+----------+
#|2018-12-09 19:06:14.546|OK    |A                     |A         |19A9BC  |OFF_PERIOD|
#+-----------------------+------+----------------------+----------+--------+----------+

Но, как вы можете видеть здесь, столбец TIME конвертируется в местное время (которое в моей системе - GMT-4).

Если это не то, что вам нужно, «исправление» зависит от вашей версии Spark и подробно описано в ответах на Spark Strutured Streaming автоматически преобразует метку времени в местное время .

Если вы применили «исправление» для конкретной версии, вы увидите следующий результат:

df.show(truncate=False)
#+-----------------------+------+----------------------+----------+--------+----------+
#|TIME                   |RESULT|PARENTLOCALIZATIONCODE|PARENTNAME|SIGFOXID|STATUS    |
#+-----------------------+------+----------------------+----------+--------+----------+
#|2018-12-10 00:06:14.546|OK    |A                     |A         |19A9BC  |OFF_PERIOD|
#+-----------------------+------+----------------------+----------+--------+----------+

Ссылки:

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