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:
- de PySpark
sum
la función no admite la adición de columnas (Pyspark versión 2.3.1) - 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.