我有一个网站上的用户登录会话的pyspark数据框,每个特定日期,但按注册日进行细分。我想将这些计数除以注册当天的计数,以获得小数值。这意味着,在字段daysSinceRegistration为0的情况下,分数值将始终为1。
+----------+----------+---------------------+-----+
|sessionDay| regDate|daysSinceRegistration|count|
+----------+----------+---------------------+-----+
|2019-06-11|2019-06-10| 1| 6463|
|2019-06-11|2019-06-11| 0|14452|
|2019-06-11|2019-06-09| 2| 3878|
+----------+----------+---------------------+-----+
我知道这可以按照以下步骤进行:
dayZeroCount = sessions_no_segmentations.filter(sessions_no_segmentations['daysSinceRegistration'] == 0).collect()[0]['count']
sessions_no_segmentations = sessions_no_segmentations.withColumn('percentUsers', fun.col('count')/dayZeroCount)
但是,这需要一个collect()
调用,该调用非常繁琐,并且此代码需要在短时间内运行很多次(大约300个不同的数据帧)。调用collect()
似乎不是理想的方法。
有什么方法可以在不致电此collect()
的情况下获得理想的结果吗?