Я не знаю, как получить значение из столбца с условиями на другие столбцы - PullRequest
1 голос
/ 27 апреля 2020

Мне нужно было получить имя покемона от Датафрейма, который имеет самую высокую атаку («имя» представляет столбец и «атака» тоже) для каждого типа (например, вода или огонь и т. Д. c), который я пишу вниз по этому коду:

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|
+----------+-----+------+

Я не знаю, как с этим справиться. Когда я запускаю эту строку, она не работает. Кто-нибудь может мне помочь, пожалуйста?

1 Ответ

0 голосов
/ 28 апреля 2020

Вы можете использовать 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|
#+---------+
...