Ho registri utente che ho preso da un csv e convertito in un DataFrame per sfruttare le funzionalità di query di SparkSQL. Un singolo utente creerà numerose voci all'ora e vorrei raccogliere alcune informazioni statistiche di base per ciascun utente; in realtà solo il conteggio delle istanze utente, la media e la deviazione standard di numerose colonne. Sono stato in grado di ottenere rapidamente la media e contare le informazioni utilizzando groupBy ($ "utente") e l'aggregatore di funzioni SparkSQL per il conteggio e AVG:Calcola la deviazione standard dei dati raggruppati in Spark DataFrame
val meanData = selectedData.groupBy($"user").agg(count($"logOn"),
avg($"transaction"), avg($"submit"), avg($"submitsPerHour"), avg($"replies"),
avg($"repliesPerHour"), avg($"duration"))
Tuttavia, non riesco a trovare un modo altrettanto elegante per calcolare la deviazione standard. Finora posso calcolare solo mappando una stringa, doppia coppia e utilizzare StatCounter() stdev utility:.
val stdevduration = duration.groupByKey().mapValues(value =>
org.apache.spark.util.StatCounter(value).stdev)
Ciò restituisce un RDD però, e vorrei cercare di mantenere tutto in un dataframe per ulteriori query possibili sui dati restituiti.
funziona perfettamente! Grazie mille per l'ottima risposta e per l'aggiunta alla chiamata della funzione alias. – the3rdNotch
errore di battitura super: stdev -> stddev – Jesse
Ci sono tre funzioni nelle funzioni di SparkSQL: stddev, stddev_samp, stddev_pop. Quindi c'è più bisogno di un'implementazione personalizzata? –