J'ai une Dataframe que je lis à partir d'un fichier CSV avec de nombreuses colonnes comme: timestamp, steps, Heartrate etc.
Je veux additionner les valeurs de chaque colonne, par exemple le nombre total d'étapes sur la colonne "étapes".
Pour autant que je sache, je souhaite utiliser ce type de fonctions: http://spark.Apache.org/docs/latest/api/scala/index.html#org.Apache.spark.sql.functions $
Mais je peux comprendre comment utiliser la somme de fonctions.
Quand j'écris ce qui suit:
val df = CSV.load(args(0))
val sumSteps = df.sum("steps")
la somme des fonctions ne peut pas être résolue.
Est-ce que j'utilise mal la fonction sum? Faut-il d'abord utiliser la carte des fonctions? et si oui comment?
Un exemple simple serait très utile! J'ai commencé à écrire Scala récemment.
Si vous voulez sum
toutes les valeurs d'une colonne, il est plus efficace d'utiliser les variables internes DataFrame
RDD
et 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
Vous devez d'abord importer les fonctions:
import org.Apache.spark.sql.functions._
Ensuite, vous pouvez les utiliser comme ceci:
val df = CSV.load(args(0))
val sumSteps = df.agg(sum("steps")).first.get(0)
Vous pouvez également lancer le résultat si nécessaire:
val sumSteps: Long = df.agg(sum("steps").cast("long")).first.getLong(0)
Modifier:
Pour plusieurs colonnes (par exemple "col1", "col2", ...), vous pouvez obtenir toutes les agrégations à la fois:
val sums = df.agg(sum("col1").as("sum_col1"), sum("col2").as("sum_col2"), ...).first
Edit2:
Pour appliquer dynamiquement les agrégations, les options suivantes sont disponibles:
df.groupBy().sum()
val columnNames = List("col1", "col2")
df.groupBy().sum(columnNames: _*)
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()
Appliquez simplement la fonction d'agrégation, Sum sur votre colonne
df.groupby('steps').sum().show()
Suivez la documentation http://spark.Apache.org/docs/2.1.0/api/python/pyspark.sql.html
Découvrez également ce lien https://www.analyticsvidhya.com/blog/2016/10/spark-dataframe-and-operations/
Je ne suis pas sûr que c'était à ce moment-là que cette question a été posée, mais:
df.describe().show("columnName")
donne les statistiques moyennes, comptées, stdtev sur une colonne. Je pense que cela revient sur toutes les colonnes si vous ne faites que .show()