Как я могу сравнить столбцы из другого фрейма данных в PySpark - PullRequest
0 голосов
/ 09 мая 2020

У меня есть два фрейма данных:
Первый со значениями 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

Однако это не работает должным образом, потому что он берет только значение первого элемента из таблицы средних значений

1 Ответ

1 голос
/ 09 мая 2020

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'))
...