保留Pyspark中数据框中行的派生值,并在下一行进行比较

时间:2018-02-26 20:22:04

标签: python pyspark

我的数据集如下所示:

Txn_date    Ep_end_dt
31-Dec-17   30-Dec-17
30-Dec-17   28-Dec-17
28-Dec-17   27-Dec-17
27-Dec-17   26-Dec-17
26-Dec-17   24-Dec-17
25-Dec-17   23-Dec-17
24-Dec-17   23-Dec-17
23-Dec-17   21-Dec-17

txn date和ep_end_dt组合应归类为非重叠剧集,如下表所示:

Txn_date    Ep_end_dt   Episode
31-Dec-17   30-Dec-17   1
30-Dec-17   28-Dec-17   0
28-Dec-17   27-Dec-17   1
27-Dec-17   26-Dec-17   0
26-Dec-17   24-Dec-17   1
25-Dec-17   23-Dec-17   0
24-Dec-17   23-Dec-17   0
23-Dec-17   21-Dec-17   1

31至30是一集,而30至28不是因为第一间隔已经包含30,28至27是一集,而27至26不是因为27已经在间隔28至27等等中被覆盖。显然,合成的剧集标志取决于先前的间隔是否被分类为剧集。

我需要在Pyspark实现这一目标。自从我开始在Pyspark工作已经有一个月了。我试图根据txn_date和ep_end_dt的滞后来定义规则

df.withColumn("lag_txn",lag(txn_date,1))\
.withColumn("lag_ep_end_dt",lag(ep_end_Dt,1))

为了达到基于滞后的规则,我尝试了不同的滞后顺序。但是,由于它没有考虑到前一集的创作,我没有得到任何虚拟变量的组合,可以做到这一点。

我尝试过循环和递归。但是,在Pyspark中,我通过递归获得了达到最大深度的运行时错误,并且循环给出了超时错误。有人可以帮我解决这个问题吗?

0 个答案:

没有答案