Compartir a través de


max_by

Devuelve el valor del parámetro col asociado al valor máximo del parámetro ord. Esta función se usa a menudo para buscar el valor del parámetro col correspondiente al valor máximo del parámetro ord dentro de cada grupo cuando se usa con groupBy(). La función no es determinista, por lo que el orden de salida puede ser diferente para los asociados a los mismos valores de col.

Syntax

from pyspark.sql import functions as sf

sf.max_by(col, ord)

Parámetros

Parámetro Tipo Description
col pyspark.sql.Column o nombre de columna Columna que representa los valores que se van a devolver. Esto podría ser la instancia de columna o el nombre de columna como cadena.
ord pyspark.sql.Column o nombre de columna Columna que debe maximizarse. Esto podría ser la instancia de columna o el nombre de columna como cadena.

Devoluciones

pyspark.sql.Column: un objeto de columna que representa el valor de col asociado al valor máximo de ord.

Examples

Ejemplo 1: Uso de max_by con 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|
+------+----------------------+

Ejemplo 2: Uso de max_by con distintos tipos de datos

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

Ejemplo 3: Uso de max_by donde ord tiene varios valores máximos

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