根据Pyspark数据框中的一列平均值过滤数据?

时间:2020-07-09 16:57:49

标签: apache-spark pyspark

如何根据薪水高于平均薪水的条件从数据框中过滤数据。

类似这样的东西

df.select('name')。filter((df ['salary'])>(avg ['salary]))

应使用确切的命令。TIA

1 个答案:

答案 0 :(得分:2)

尝试将平均值存储到 Multiple Select 中,并在Autocomplete子句中使用变量。

variable

filter

Example:

from pyspark.sql.functions import *
from pyspark.sql.types import *
df.show()
#+------+----+
#|salary|name|
#+------+----+
#|     1|   a|
#|     2|   b|
#|     3|   c|
#+------+----+

avg=df.select(avg('salary').cast("int")).collect()[0][0]
df.filter(df['salary'] > avg).show()
#+------+----+
#|salary|name|
#+------+----+
#|     3|   c|
#+------+----+

df.select("name").filter(df['salary'] > avg).show()
#+----+
#|name|
#+----+
#|   c|
#+----+

Using window average function:

import sys
from pyspark.sql import * 
w=Window.orderBy(monotonically_increasing_id()).rowsBetween(-sys.maxsize,sys.maxsize)
df.withColumn("avg_salary",avg(col("salary")).over(w).cast("int")).filter(col("salary") > col("avg_salary")).select("name").show()
#+----+
#|name|
#+----+
#|   c|
#+----+