Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark dataframe将列除以列中的常量值,而不收集数据帧_Python_Pyspark_Apache Spark Sql - Fatal编程技术网

Python Pyspark dataframe将列除以列中的常量值,而不收集数据帧

Python Pyspark dataframe将列除以列中的常量值,而不收集数据帧,python,pyspark,apache-spark-sql,Python,Pyspark,Apache Spark Sql,我在一个网站上有一个pyspark数据框架,每个特定的日子都有用户登录会话数,但按注册日期划分。我想将这些计数除以注册当天的计数,得到分数。这意味着,如果字段DaysSincerRegistration为0,则分数值将始终为1 +----------+----------+---------------------+-----+ |sessionDay| regDate|daysSinceRegistration|count| +----------+----------+---------

我在一个网站上有一个pyspark数据框架,每个特定的日子都有用户登录会话数,但按注册日期划分。我想将这些计数除以注册当天的计数,得到分数。这意味着,如果字段DaysSincerRegistration为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()
调用的情况下获得所需的结果?

数据帧只有一行
dayssincerregistration==0
?只需在该条件下将数据帧连接到自身即可。类似于
df.alias(“r”).join(df.where(“dayssincerregistration==0”).select(“count”).alias(“r”).selectExpr(“r.*,r.count/l.count as percentUsers”)
仍然需要进行一些修补,但它确实做到了!非常感谢你!一个数据帧只有一行
daysSinceRegistration==0
?只需在该条件下将数据帧连接到自身即可。类似于
df.alias(“r”).join(df.where(“dayssincerregistration==0”).select(“count”).alias(“r”).selectExpr(“r.*,r.count/l.count as percentUsers”)
仍然需要进行一些修补,但它确实做到了!非常感谢你!