Saltar al contenido

¿Cómo puedo sumar varias columnas en un marco de datos de chispa en pyspark?

Investigamos por distintos sitios para así darte la respuesta para tu dilema, si tienes alguna pregunta deja tu inquietud y contestaremos porque estamos para servirte.

Solución:

[Editing to explain each step]

Si usted tiene static lista de columnas, puede hacer esto:

df.withColumn("result", col("col1") + col("col2") + col("col3"))

Pero si no desea escribir toda la lista de columnas, debe generar la frase col("col1") + col("col2") + col("col3") iterativamente. Para ello, puede utilizar el reduce método con add función para obtener esto:

reduce(add, [col(x) for x in df.columns])

Las columnas se agregan de dos en dos, por lo que obtendrías col(col("col1") + col("col2")) + col("col3") en vez de col("col1") + col("col2") + col("col3"). Pero el efecto sería el mismo.

los col(x) asegura que usted está recibiendo col(col("col1") + col("col2")) + col("col3") en lugar de un simple string concat (que genera (col1col2col3).

[TL;DR,]

Combinando los pasos anteriores, puede hacer esto:

from functools import reduce
from operator import add
from pyspark.sql.functions import col

df.na.fill(0).withColumn("result" ,reduce(add, [col(x) for x in df.columns]))

los df.na.fill(0) parte es manejar nulos en sus datos. Si no tiene ningún valor nulo, puede omitirlo y hacer esto en su lugar:

df.withColumn("result" ,reduce(add, [col(x) for x in df.columns]))

Prueba esto:

df = df.withColumn('result', sum(df[col] for col in df.columns))

df.columns será una lista de columnas de df.

Agregue múltiples columnas de una lista en una columna

Probé muchos métodos y las siguientes son mis observaciones:

  1. de PySpark sum la función no admite la adición de columnas (Pyspark versión 2.3.1)
  2. Python incorporado sum la función funciona para algunas personas pero da error para otras.

Por lo tanto, la adición de múltiples columnas se puede lograr usando el expr Función en PySpark, que toma una expresión para calcular como entrada.

from pyspark.sql.functions import expr

cols_list = ['a', 'b', 'c']

# Creating an addition expression using `join`
expression = '+'.join(cols_list)

df = df.withColumn('sum_cols', expr(expression))

Esto nos da la suma deseada de columnas. También podemos usar cualquier otra expresión compleja para obtener otra salida.

Al final de la web puedes encontrar las críticas de otros usuarios, tú igualmente tienes la libertad de insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *