计算交易数据中的天数,但在PySpark中从第二天早上6点到第二天早上6点

时间:2019-05-28 13:30:08

标签: apache-spark pyspark apache-spark-sql

我有交易数据,但是我需要根据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

非常感谢您提供的所有帮助。

1 个答案:

答案 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()。