PySpark:基于当前行值计算行数

PySpark:基于当前行值计算行数,pyspark,apache-spark-sql,pyspark-sql,Pyspark,Apache Spark Sql,Pyspark Sql,我有一个带有“速度”列的数据帧我能否有效地为每一行添加一列数据帧中的行数,以使其“速度”在行“速度”的+/2以内 您可以使用窗口功能: #按速度排序窗口,并查看范围[0;+2] w=Window.orderBy('Speed')。范围介于(0,2)之间 #定义一列,计算包含值Speed+2的行数 结果=results.withColumn('count+2',F.count('Speed')。over(w))。orderBy('Speed')) 结果显示() +-----+-----+ |速度|

我有一个带有“速度”列的数据帧
我能否有效地为每一行添加一列数据帧中的行数,以使其“速度”在行“速度”的+/2以内


您可以使用窗口功能:

#按速度排序窗口,并查看范围[0;+2]
w=Window.orderBy('Speed')。范围介于(0,2)之间
#定义一列,计算包含值Speed+2的行数
结果=results.withColumn('count+2',F.count('Speed')。over(w))。orderBy('Speed'))
结果显示()
+-----+-----+
|速度|计数|
+-----+-----+
|    1|    6|
|    1|    6|
|    2|    7|
|    2|    7|
|    3|   10|
|    3|   10|
|    4|   11|
|    4|   11|
|    4|   11|
|    5|    8|
|    5|    8|
|    5|    8|
|    5|    8|
|    5|    8|
|    6|    4|
|    6|    4|
|    6|    4|
|    8|    2|
|   10|    2|
|   12|    1|
+-----+-----+
注意:窗口函数对所研究的行本身进行计数。您可以通过在count列中添加-1来更正此问题

results=results.withColumn('count+2',F.count('Speed')。over(w)-1)。orderBy('Speed'))

能否添加所需输出的样本?非常感谢!我会试试:-)。我一直在拼命寻找F.when()的解决方案,这真的很麻烦。如果我看到的速度范围是十进制的,你能给我一个提示吗?比如速度在+/-0.5以内?我得到了一个“方法rangeBetween([class java.lang.Double,class java.lang.Double])不存在”的错误事实上,它看起来像是
pyspark.sql.Window.rangeBetween
只接受整数作为参数。然后你可以将你的速度栏乘以10,并在+/-5范围内工作
df=df.withColumn(“speed_bis”F.col(“speed”)*10)
是的,谢谢,这就是我刚才做的,而且似乎很有效。我验证了答案。
results = spark.createDataFrame([[1],[2],[3],[4],[5],
                                 [4],[5],[4],[5],[6],
                                 [5],[6],[1],[3],[8],
                                 [2],[5],[6],[10],[12]], 
                                 ['Speed'])

results.show()

+-----+
|Speed|
+-----+
|    1|
|    2|
|    3|
|    4|
|    5|
|    4|
|    5|
|    4|
|    5|
|    6|
|    5|
|    6|
|    1|
|    3|
|    8|
|    2|
|    5|
|    6|
|   10|
|   12|
+-----+