У меня есть фрейм данных 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()
?