我有交易数据,但是我需要根据if
个日期计算访问次数。问题是我需要根据上午6点至上午6点的时间戳进行计算,即如果交易发生在04/07的上午12点至凌晨6点之间,那么仍应将其计为一次访问。
有什么办法可以实现?
countDistinct
因此,如上所述,我需要访问每个customer_ID。
这是我到目前为止的代码
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
非常感谢您提供的所有帮助。
答案 0 :(得分:1)
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|
#+-----------+--------------+--------------------+-----------------+
然后,您可以使用已有的代码在新列adjusted_trx_date
上进行countDistinct()。