Comment additionner plusieurs colonnes dans Spark? Par exemple, dans SparkR, le code suivant fonctionne pour obtenir la somme d'une colonne, mais si j'essaye d'obtenir la somme des deux colonnes dans df
, j'obtiens une erreur.
# Create SparkDataFrame
df <- createDataFrame(faithful)
# Use agg to sum total waiting times
head(agg(df, totalWaiting = sum(df$waiting)))
##This works
# Use agg to sum total of waiting and eruptions
head(agg(df, total = sum(df$waiting, df$eruptions)))
##This doesn't work
Le code SparkR ou PySpark fonctionnera.
org.Apache.spark.sql.functions.sum(Column e)
Fonction d'agrégation: renvoie la somme de toutes les valeurs de l'expression.
Comme vous pouvez le voir, sum
ne prend qu'une seule colonne en entrée, donc sum(df$waiting, df$eruptions)
ne fonctionnera pas. Puisque vous voulez résumer les champs numériques, vous pouvez fairesum(df("waiting") + df("eruptions"))
. Si vous wan pour résumer les valeurs des colonnes individuelles, vous pouvez df.agg(sum(df$waiting),sum(df$eruptions)).show
Pour PySpark, si vous ne voulez pas taper explicitement les colonnes:
from operator import add
from functools import reduce
new_df = df.withColumn('total',reduce(add, [F.col(x) for x in numeric_col_list]))
vous pouvez faire quelque chose comme ci-dessous dans pyspark
>>> from pyspark.sql import functions as F
>>> df = spark.createDataFrame([("a",1,10), ("b",2,20), ("c",3,30), ("d",4,40)], ["col1", "col2", "col3"])
>>> df.groupBy("col1").agg(F.sum(df.col2+df.col3)).show()
+----+------------------+
|col1|sum((col2 + col3))|
+----+------------------+
| d| 44|
| c| 33|
| b| 22|
| a| 11|
+----+------------------+
code sparkR:
library(SparkR)
df <- createDataFrame(sqlContext,faithful)
w<-agg(df,sum(df$waiting)),agg(df,sum(df$eruptions))
head(w[[1]])
head(w[[2]])