运行此代码时:
df
.select($"CALC_DATE", $"ENGINE_SERIES", $"program_group_name")
.groupBy($"CALC_DATE", $"ENGINE_SERIES", $"program_group_name")
.orderBy($"CALC_DATE".desc)
.count()
.withColumnRenamed("count", "Actual_count")
.show()
我得到以下错误:
error: value orderBy is not a member of org.apache.spark.sql.RelationalGroupedDataset
如错误消息中所述,orderBy
不能用于RelationalGroupedDataset
。
groupBy
函数不像where
、select
甚至orderBy
函数那样返回基本DataFrame
。它返回一个只能应用聚集函数的RelationalGroupedDataset
,例如示例中的count
。聚合函数将返回一个DataFrame
,您可以对其进行排序
在您的情况下,只需切换orderBy
和count
,它就会工作。
GroupBy基本上将返回RelationalGroupedDataset,这意味着与包含某些组的数据集的关系。现在,要将此RelationalGroupedDataset转换为Dataframe,您需要为此数据集的每个组至少指定一个聚合。现在,这个聚合可以是count、sum,也可以在RelationalGroupedDataset上使用.agg((方法应用多重聚合。一旦将此RelationalGroupedDataset转换为普通Dataframe,就可以在此Dataframe上使用普通orderBy和其他函数。