如何根据薪水高于平均薪水的条件从数据框中过滤数据。
类似这样的东西
df.select('name')。filter((df ['salary'])>(avg ['salary]))
应使用确切的命令。TIA
答案 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|
#+----+