Si hallas algún fallo con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.
Solución:
Primero debes importar las funciones:
import org.apache.spark.sql.functions._
Entonces puedes usarlos así:
val df = CSV.load(args(0))
val sumSteps = df.agg(sum("steps")).first.get(0)
También puede emitir el resultado si es necesario:
val sumSteps: Long = df.agg(sum("steps").cast("long")).first.getLong(0)
Editar:
Para varias columnas (por ejemplo, “col1”, “col2”, …), puede obtener todas las agregaciones a la vez:
val sums = df.agg(sum("col1").as("sum_col1"), sum("col2").as("sum_col2"), ...).first
Edit2:
Para aplicar dinámicamente las agregaciones, están disponibles las siguientes opciones:
- Aplicando a todas las columnas numéricas a la vez:
df.groupBy().sum()
- Aplicar a una lista de nombres de columnas numéricas:
val columnNames = List("col1", "col2")
df.groupBy().sum(columnNames: _*)
- Aplicar a una lista de nombres de columnas numéricas con alias y/o conversiones:
val cols = List("col1", "col2")
val sums = cols.map(colName => sum(colName).cast("double").as("sum_" + colName))
df.groupBy().agg(sums.head, sums.tail:_*).show()
Si quieres sum
todos los valores de una columna, es más eficiente usar DataFrame
es interno RDD
y reduce
.
import sqlContext.implicits._
import org.apache.spark.sql.functions._
val df = sc.parallelize(Array(10,2,3,4)).toDF("steps")
df.select(col("steps")).rdd.map(_(0).asInstanceOf[Int]).reduce(_+_)
//res1 Int = 19
Simplemente aplique la función de agregación, Suma en tu columna
df.groupby('steps').sum().show()
Siga la documentación http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html
Consulte este enlace también https://www.analyticsvidhya.com/blog/2016/10/spark-dataframe-and-operations/
Sección de Reseñas y Valoraciones
Finalizando este artículo puedes encontrar las interpretaciones de otros creadores, tú incluso puedes insertar el tuyo si te apetece.