首页 文章

如何根据Pyspark中其他列的值增加/减少列

提问于
浏览
0

我在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和-1)和 greatest(0,col) 函数,确保它永远不会消极 .

    auth_dataset.groupby('time','src_comp')\
    .agg(F.sum(F.when(auth_dataset.auth_orient == 'LogOn', F.lit(1)).otherwise(F.lit(-1))).alias('LoggedOn'))\
    .withColumn('LoggedOn', F.greatest(F.lit(0),'LoggedOn'))\
    .sort('time','src_comp').show()
    

相关问题