Apache spark 按desc排序数据帧列导致分析异常[Pyspark]

Apache spark 按desc排序数据帧列导致分析异常[Pyspark],apache-spark,pyspark,Apache Spark,Pyspark,我有一个包含3列的数据框架:日志、摘要和字数。我试图计算每期期刊摘要的平均字数,然后按降序排列,以显示平均摘要最长的期刊 我已经设法达到了一个程度,我只有日记和平均字数。这是通过以下方式实现的: newDF = marchDF.select("journal", "abstract").withColumn("wordcount", lit("0").cast("integer")).withCo

我有一个包含3列的数据框架:日志、摘要和字数。我试图计算每期期刊摘要的平均字数,然后按降序排列,以显示平均摘要最长的期刊

我已经设法达到了一个程度,我只有日记和平均字数。这是通过以下方式实现的:

newDF = marchDF.select("journal", "abstract").withColumn("wordcount", lit("0").cast("integer")).withColumn("wordcount", sql.size(sql.split(sql.col("abstract"), " ")))
nonullDF = newDF.filter(col("journal").isNotNull()).filter(col("abstract").isNotNull())
groupedDF = nonullDF.select("journal", "wordcount").groupBy("journal").avg("wordcount")
但是,当我尝试按字数排序时,它会抛出错误:

无法解析给定输入列“`wordcount`:[avg(wordcount),journal]

我试过:

orderedDF = groupedDF.orderBy(col("wordcount")).desc().show(5)
以及:


但是两者都会抛出相同的错误,我不明白为什么。

这是因为正如错误所说,没有名为
wordcount
的列。您要按其排序的列称为
avg(wordcount)
,因此您可以这样做

orderedDF = groupedDF.orderBy("avg(wordcount)", ascending=False).show(5)
或者,您可以在聚合期间将
avg
列重命名为
wordcount

import pyspark.sql.functions as F

groupedDF = nonullDF.select("journal", "wordcount").groupBy("journal").agg(F.avg("wordcount").alias("wordcount"))
orderedDF = groupedDF.orderBy("wordcount", ascending=False).show(5)
请注意按降序排序的正确语法

import pyspark.sql.functions as F

groupedDF = nonullDF.select("journal", "wordcount").groupBy("journal").agg(F.avg("wordcount").alias("wordcount"))
orderedDF = groupedDF.orderBy("wordcount", ascending=False).show(5)