Подсчет количества дней в данных транзакции, но с 6 утра до 6 утра следующего дня в PySpark - PullRequest
0 голосов
/ 28 мая 2019

У меня есть данные транзакции, но мне нужно рассчитать количество посещений на основе countDistinct дат.Проблема заключается в том, что мне нужно рассчитать его на основе отметки времени с 6 утра до 6 утра, то есть, если транзакция произойдет 04/07 между 12 и 6 часами утра, она все равно должна учитываться как одно посещение.

Есть ли способ, которым я могу достичь этого?

CUSTOMER_ID   TRANSACTION_ID   TRANSACTION_DATETIME

     C1             T1           04/07/2019 22:20:00
     C1             T1           04/08/2019 1:00:00
     C1             T2           04/07/2019 17:10:00
     C1             T3           05/08/2019 12:00:00

Итак, как указано выше, мне нужны посещения для каждого customer_ID.

Это код, который у меня есть до сих пор

testdfmod = df.groupBy("CUSTOMER_ID") \
                           .agg(F.max(F.col('TRANSACTION_DATETIME')).alias("TRANSACTION_DATETIME"), \
                    F.countDistinct(
                                    F.to_date(F.col('TRANSACTION_DATETIME')).alias('TRANSACTION_DATETIME').cast("date")) \
                           .alias("TOTAL_TRIPS"))

Большое спасибо за помощь.

1 Ответ

1 голос
/ 28 мая 2019

IIUC, вы можете просто добавить новый столбец со значением, равным TRANSACTION_DATETIME минус 6 часов (6 * 3600 секунд):

from pyspark.sql import functions as F

df.withColumn('adjusted_trx_date', F.from_unixtime(F.unix_timestamp('TRANSACTION_DATETIME', format='MM/dd/yyyy HH:mm:ss')-6*3600, format='yyyy-MM-dd')).show()
#+-----------+--------------+--------------------+-----------------+
#|CUSTOMER_ID|TRANSACTION_ID|TRANSACTION_DATETIME|adjusted_trx_date|
#+-----------+--------------+--------------------+-----------------+
#|         C1|            T1| 04/07/2019 22:20:00|       2019-04-07|
#|         C1|            T1|  04/08/2019 1:00:00|       2019-04-07|
#|         C1|            T2| 04/07/2019 17:10:00|       2019-04-07|
#|         C1|            T3| 05/08/2019 12:00:00|       2019-05-08|
#+-----------+--------------+--------------------+-----------------+

Затем вы можете выполнить countDistinct () для нового столбца adjusted_trx_date с кодом, который у вас был.

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