我如何比较PySpark中另一个数据框的列

我有两个数据框: 首先使用AVERAGE值:

+----------+-----+  
| 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'))
点赞
评论