max_by
Renvoie la valeur du paramètre col associée à la valeur maximale du paramètre ord. Cette fonction est souvent utilisée pour trouver la valeur du paramètre col correspondant à la valeur maximale du paramètre ord au sein de chaque groupe lorsqu'elle est utilisée avec groupBy(). La fonction est non déterministe, de sorte que l'ordre de sortie peut être différent pour ceux associés aux mêmes valeurs de col.
Syntaxe
from pyspark.sql import functions as sf
sf.max_by(col, ord)
parameter
parameter | Type | Description |
|---|---|---|
|
| La colonne représentant les valeurs à retourner. Il peut s'agir de l'instance de colonne ou du nom de colonne sous forme de chaîne. |
|
| La colonne qui doit être maximisée. Il peut s'agir de l'instance de colonne ou du nom de colonne sous forme de chaîne. |
Renvoie
pyspark.sql.Column: Un objet colonne représentant la valeur de col qui est associée à la valeur maximale de ord.
Exemples
Exemple 1 : utilisation de max_by avec groupBy
import pyspark.sql.functions as sf
df = spark.createDataFrame([
("Java", 2012, 20000), ("dotNET", 2012, 5000),
("dotNET", 2013, 48000), ("Java", 2013, 30000)],
schema=("course", "year", "earnings"))
df.groupby("course").agg(sf.max_by("year", "earnings")).sort("course").show()
+------+----------------------+
|course|max_by(year, earnings)|
+------+----------------------+
| Java| 2013|
|dotNET| 2013|
+------+----------------------+
Exemple 2 : Utilisation de max_by avec différents types de données
import pyspark.sql.functions as sf
df = spark.createDataFrame([
("Marketing", "Anna", 4), ("IT", "Bob", 2),
("IT", "Charlie", 3), ("Marketing", "David", 1)],
schema=("department", "name", "years_in_dept"))
df.groupby("department").agg(
sf.max_by("name", "years_in_dept")
).sort("department").show()
+----------+---------------------------+
|department|max_by(name, years_in_dept)|
+----------+---------------------------+
| IT| Charlie|
| Marketing| Anna|
+----------+---------------------------+
Exemple 3 : Utilisation de max_by là où ord a plusieurs valeurs maximales
import pyspark.sql.functions as sf
df = spark.createDataFrame([
("Consult", "Eva", 6), ("Finance", "Frank", 5),
("Finance", "George", 9), ("Consult", "Henry", 7)],
schema=("department", "name", "years_in_dept"))
df.groupby("department").agg(
sf.max_by("name", "years_in_dept")
).sort("department").show()
+----------+---------------------------+
|department|max_by(name, years_in_dept)|
+----------+---------------------------+
| Consult| Henry|
| Finance| George|
+----------+---------------------------+