python - 我如何比较 PySpark 中另一个数据框的列
问题描述
我有两个数据框:
首先是 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'))
推荐阅读
- networking - 您可以响应来自不同服务器的 UDP 数据包吗?
- ios - UITableViewCell 用自定尺寸标签扩展动画,视觉动画问题
- c++ - /usr/bin/bash: g++: 找不到命令
- javascript - React Hooks:设置组件状态而无需重新渲染两次
- python - 数据流:无工作人员活动
- javascript - 滚动时将图像从屏幕中间移动到角落
- json - 在 JQ 映射键值中使用整数
- elasticsearch - MultiMatch 的动态字段列表 - Nest
- java - 如何在使用 MockMVC 测试表单时将集合设置为参数
- html - 是否可以同时使用 ~ 和 + 选择器?