我有两个数据框:首先使用AVG值:
+----------+-----+
| Category | AVG |
+----------+-----+
| Categ | 1.0 |
+----------+-----+
| Categ2 | 0.5 |
+----------+-----+
...
...第二个具有休闲类别:类别,名称,价格问题是:如何从第一张表中删除所有价格低于平均价格的记录?我尝试过这种方式:
dataGreaterAvge = data.where(data.Price >= avgCategoryPrice.where(data.Category == avgCategoryPrice.Category).collect()[0]["avg(Price)"])
dataGreaterAvge - First dataframe
data - Second dataframe
但是,这不能正常工作,因为它只从平均值表中获取第一个元素的值
Spark的工作方式类似于SQL ...所以...
首先您需要加入数据框。
a = df1.alias('a')
b = df2.alias('b')
df_joined = a.join(b, a.Category == b.Category)
然后您将能够正确过滤
from pyspark.sql import functions as f
df_joined.select(col('a.category'),col('a.AVG'))\
.where(col('a.AVG') > f.avg(col('b.avg')).groupBy(col('a.AVG'))