我在Pyspark中有审计日志数据,我试图弄清楚在任何给定时间有多少人登录到系统 .
例如,我正在使用的数据帧具有以下结构
time src_comp auth_orient
1 C1 LogOn
2 C1 LogOn
2 C1 LogOn
3 C2 LogOn
3 C1 LogOff
4 C1 LogOn
4 C2 LogOff
5 C1 LogOn
6 C2 LogOn
6 C3 LogOff
然后从我的代码我想创建另一个列,显示有多少人登录,如下所示 . 我也不希望登录列永远消失,所以如果有人退出我没有跟踪的系统,我不想减少列:
预期产出:
time src_comp LoggedOn
1 C1 1
2 C1 2
3 C2 1
3 C1 1
3 C1 2
4 C2 0
5 C1 3
6 C2 1
6 C3 0
我有以下代码,我尝试并得到一个错误 .
auth_dataset.groupby(auth_dataset.time,auth_dataset.src_comp).agg(F.when(auth_dataset.strt=='LogOn',number+=1).otherwise(number-=1))
1 回答
请尝试以下代码 . 它总结了所有值(1和-1)和
greatest(0,col)
函数,确保它永远不会消极 .