Spark Window-如何比较数据帧的第一行和第n行?

时间:2019-05-20 20:37:59

标签: scala apache-spark

我有一个数据框,如下所示。我必须将具有claim_typ的行的行列作为“ PD”,并与当前行的行列进行区别,然后将其添加为新列。

源数据框:

Id svc_dt clm_typ rank 48115882 20180209 RV 1 48115882 20180209 RJ 2 48115882 20180216 RJ 3 48115882 20180302 RJ 4 48115882 20180402 PD 5 48115882 20180502 RJ 6

预期的结果数据框:

Id svc_dt clm_typ rank diff_PD_Rank 48115882 20180209 RV 1 4 (Current rank - rank of column with 'PD') 48115882 20180209 RJ 2 3 48115882 20180216 RJ 3 2 48115882 20180302 RJ 4 1 48115882 20180402 PD 5 null 48115882 20180502 RJ 6 null

1 个答案:

答案 0 :(得分:1)

PySpark解决方案。

假设每个id的每个clm_type'PD'有一行,则可以将条件聚合与max(when...))一起使用以获取必要的差异。

# necessary imports 
w1 = Window.partitionBy(df.id).orderBy(df.svc_dt)
df = df.withColumn('rnum',row_number().over(w1))
w2 = Window.partitionBy(df.id)
res = df.withColumn('diff_pd_rank',max(when(df.clm_typ == 'PD',df.rnum)).over(w2) - rnum)
res.show()