PySpark, используя функцию Min на отметке времени, выбирая неправильное значение - PullRequest
0 голосов
/ 27 марта 2020

У меня есть такой фрейм данных:

+-------+-------------------+
|id     |scandatetime       |
+-------+-------------------+
|1234567|2020-03-13 10:56:18|
|1234567|2020-03-12 17:09:48|
|1234567|2020-03-12 15:42:25|
|1234567|2020-03-09 16:30:22|
|1234567|2020-03-12 17:09:48|
|1234567|2020-03-09 16:30:22|
|1234567|2020-03-12 15:42:25|
+-------+-------------------+

И я хотел бы рассчитать минимальную и максимальную метки времени для этого идентификатора. Для этого я использовал следующий код:

dfScans = datasource1.toDF()
dfScans = dfScans.withColumn('scandatetime',f.unix_timestamp(f.col('scandatetime'), "yyyy-MM-dd hh:mm:ss").cast("timestamp"))


dfDateAgg = dfScans.groupBy("id").agg(f.min('scandatetime').alias('FirstScanDate'),
    f.max('scandatetime').alias('LastScanDate'))

Но я получаю следующее возвращение:

+-------+-------------------+-------------------+
|id     |FirstScanDate      |LastScanDate       |
+-------+-------------------+-------------------+
|1234567|2020-03-13 10:56:18|2020-03-13 10:56:18|
+-------+-------------------+-------------------+

Почему функция min не возвращает правильное значение?

1 Ответ

2 голосов
/ 27 марта 2020

Ваши метки времени имеют часы в диапазоне 0-23, поэтому вы используете неправильный формат даты. Вы должны использовать "yyyy-MM-dd HH:mm:ss" (заглавная H) ( См. Документы для SimpleDateFormat).

Нижний регистр h относится к часам в диапазоне 1-12, и таким образом, все значения, кроме "2020-03-13 10:56:18", становятся null при преобразовании в timestamp.

from pyspark.sq import functions as f

dfScans = dfScans.withColumn(
    'scandatetime',
    f.unix_timestamp(
        f.col('scandatetime'), 
        "yyyy-MM-dd HH:mm:ss"
    ).cast("timestamp")
)

dfScans.groupBy("id").agg(f.min('scandatetime').alias('FirstScanDate'),
    f.max('scandatetime').alias('LastScanDate')).show()

#+-------+-------------------+-------------------+
#|     id|      FirstScanDate|       LastScanDate|
#+-------+-------------------+-------------------+
#|1234567|2020-03-09 16:30:22|2020-03-13 10:56:18|
#+-------+-------------------+-------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...