J'ai besoin du bloc de données résultant dans la ligne ci-dessous, pour avoir un nom d'alias "maxDiff" pour la colonne max ('diff') après groupBy. Cependant, la ligne ci-dessous ne change rien et ne renvoie pas d'erreur.
grpdf = joined_df.groupBy(temp1.datestamp).max('diff').alias("maxDiff")
Cela est dû au fait que vous aliasez l'ensemble de l'objet DataFrame
, pas Column
. Voici un exemple d'alias uniquement pour le Column
:
import pyspark.sql.functions as func
grpdf = joined_df \
.groupBy(temp1.datestamp) \
.max('diff') \
.select(func.col("max(diff)").alias("maxDiff"))
Vous pouvez utiliser agg
au lieu d'appeler la méthode max
:
from pyspark.sql.functions import max
joined_df.groupBy(temp1.datestamp).agg(max("diff").alias("maxDiff"))
De même à Scala
import org.Apache.spark.sql.functions.max
joined_df.groupBy($"datestamp").agg(max("diff").alias("maxDiff"))
ou
joined_df.groupBy($"datestamp").agg(max("diff").as("maxDiff"))
En plus des réponses déjà ici, les méthodes suivantes sont également pratiques si vous connaissez le nom de la colonne agrégée, où vous n'avez pas besoin d'importer depuis pyspark.sql.functions
:
1
grouped_df = joined_df.groupBy(temp1.datestamp) \
.max('diff') \
.selectExpr('max(diff) AS maxDiff')
Voir docs pour plus d'informations sur .selectExpr()
2
grouped_df = joined_df.groupBy(temp1.datestamp) \
.max('diff') \
.withColumnRenamed('max(diff)', 'maxDiff')
Voir docs pour plus d'informations sur .withColumnRenamed()
Cette réponse va ici plus en détail: https://stackoverflow.com/a/34077809