У меня есть данные о транзакциях, но мне нужно рассчитать количество посещений на основе countDistinct
дат. Проблема в том, что мне нужно рассчитать его на основе временной метки от 6:00 до 6:00, т.е. если транзакция происходит 04/07 между 12:00 и 6:00, ее все равно следует учитывать как одно посещение.
Есть ли способ добиться этого?
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"))
Большое спасибо за всю помощь.
Нет, это не мой ответ... учитывая тот факт, что у меня может быть транзакция между 12:00 и 6:00 следующего дня, она работает неправильно. Скажем, у меня есть кто-то, приходящий в 22:00, а затем выполняющий другую транзакцию в 1:00, тогда, согласно вышеизложенному, это становится 2 посещениями, но согласно моему требованию это должно рассматриваться как одно посещение., если вы понимаете, что я пытаюсь сказать.
@mayankagrawal, не могли бы вы также сообщить мне, почему вы проголосовали за этот вопрос?
Понятно! Я не минусовал твой вопрос @Manas. Вероятно, кто-то, кто не мог понять ваш вопрос, хотя мне он кажется ясным.
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
с кодом, который у вас был.
Присутствует ли столбец
TRANSACTION_ID
в данных? Если да, то разве это не ваш ответ?