我必须从Dataframe那里获得Pokemon的名称,而Dataframe对每种类型(例如水或火等)都有最高级的攻击(“name”表示一列,也表示“攻击”),我写下了以下代码:
PokDf.select('name').filter(PokDf.groupby('type1').agg({'attack'='max'})).show()PokDf是DataFrame。
示例:
+----------+-----+------+
| 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|
+----------+-----+------+我不知道该怎么处理。一旦我运行了这一行,它就不工作了。有人能帮我吗?
发布于 2020-04-27 22:55:55
您可以使用window来计算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|
#+---------+https://stackoverflow.com/questions/61466445
复制相似问题