Pyspark数据框将列除以该列中的常数,而不收集数据框

时间:2019-06-12 13:47:07

标签: python pyspark apache-spark-sql

我有一个网站上的用户登录会话的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()的情况下获得理想的结果吗?

0 个答案:

没有答案