pyspark - 我不知道如何从具有其他列条件的列中获取值
问题描述
对于每种类型(例如水或火等),我必须从 Dataframe 中获取具有最高攻击力的口袋妖怪的名称(“名称”代表一列,“攻击”也代表“攻击”)我写下这段代码:
PokDf.select('name').filter(PokDf.groupby('type1').agg({'attack'='max'})).show()
PokDf 是数据帧。
样本:
+----------+-----+------+
| name|type1|attack|
+----------+-----+------+
| Bulbasaur|grass| 49|
| Ivysaur|grass| 62|
| Venusaur|grass| 100|
|Charmander| fire| 52|
|Charmeleon| fire| 64|
| Charizard| fire| 104|
| Squirtle|water| 48|
| Wartortle|water| 63|
+----------+-----+------+
我不知道如何处理它。一旦我运行这条线,它就不起作用了。任何人都可以帮助我吗?
解决方案
您可以使用 awindow
来计算max over a partition
,filter on attack=max
然后是select
您的name
列。
from pyspark.sql import functions as F
from pyspark.sql.window import Window
w=Window().partitionBy("type1")
df.withColumn("max",F.max("attack").over(w))\
.filter('attack=max').select("name").show()
#+---------+ #output based on sample data above.
#| name|
#+---------+
#| Venusaur|
#|Wartortle|
#|Charizard|
#+---------+
推荐阅读
- python - Python re.match 仅在第一个 \n 之前匹配
- google-apps-script - “需要授权才能执行该操作”用于警报/弹出窗口,电子表格的 Google Apps 脚本插件
- javascript - Ajax 响应没有响应 json 响应
- android - 无法使用 Android 中的侦听器在 HistoryClient 中侦听 BP、温度和血糖的更新
- mysql - 不满足条件时,SELECT 语句应返回 0
- django - 类型错误:t.map 不是函数 - react-dom.production.min.js:4483
- opencv - 如何使用 OpenCV 获取相机焦距
- angular - 打字稿数组操作/展平
- python - python 中的 torch.matmul 计算不准确
- date - 更改字符串中日期的格式