2015-11-04 7 views
11

Ho bisogno del frame di dati risultante nella riga sottostante, per avere un nome alias "maxDiff" per la colonna massima ('diff') dopo groupBy. Tuttavia, la riga sottostante non cambia ma non genera errori.Alias ​​di colonne dopo il groupby in pyspark

grpdf = joined_df.groupBy(temp1.datestamp).max('diff').alias("maxDiff") 

risposta

12

Questo perché si sta aliasing tutta DataFrame oggetto, non Column. Ecco un esempio di come alias il Column unica:

import pyspark.sql.functions as func 

grpdf = joined_df \ 
    .groupBy(temp1.datestamp) \ 
    .max('diff') \ 
    .select(func.col("max(diff)").alias("maxDiff")) 
+0

si .. funziona ... tranne che func. non è richiesto – mhn

+1

non lo è se hai già importato 'pyspark.sql.functions' nello script – Nhor

25

È possibile utilizzare agg invece di chiamare max metodo:

from pyspark.sql.functions import max 

joined_df.groupBy(temp1.datestamp).agg(max("diff").alias("maxDiff")) 
+2

Preferisco questo alla risposta accettata perché non richiede di conoscere in anticipo il nome che Spark darà alla colonna aggregata . – abeboparebop

0

Oltre alle risposte già qui, i seguenti sono anche modi convenienti se si conoscere il nome della colonna aggregata, dove non c'è bisogno di importare da pyspark.sql.functions:

grouped_df = joined_df.groupBy(temp1.datestamp) \ 
         .max('diff') \ 
         .selectExpr('max(diff) AS maxDiff') 

Vedi docs per informazioni su .selectExpr()

grouped_df = joined_df.groupBy(temp1.datestamp) \ 
         .max('diff') \ 
         .withColumnRenamed('max(diff)', 'maxDiff') 

Vedere docs per informazioni su .withColumnRenamed()

Questa risposta qui va più nel dettaglio: https://stackoverflow.com/a/34077809

+0

** Hai provato il primo blocco di codice? ** Sembra sbagliato. Spark non può risolvere il nome della colonna con le modalità indicate. Nel tuo blocco di codice, prova a cercare la colonna ** diff ** e prova a eseguire la funzione ** max ** sul set dato ma grouped_data non contiene alcuna colonna ** diff **, contiene ** temp1.datestamp e max (diff) **. –

Problemi correlati