是否可以在Pyspark中将.agg(dictionary)合并并使用.alias()重命名结果列?

我有一个pyspark数据框'pyspark_df',我想将数据分组并使用通用函数字符串名称(如以下之一)聚合数据:'avg','count','max','mean',' min”或“ sum”。

无论聚合类型如何,我都需要将生成的聚合名称“聚合”。 我已经能够做到如下。

seriesname = 'Group'
dateVar = 'as_of_date'
aggSeriesname = 'Balance'
aggType = 'sum'
name_to_be_Changed = aggType + '(' + aggSeriesname + ')' 
group_sorted = pyspark_df.groupby(dateVar,seriesname).agg({aggSeriesname: aggType}).withColumnRenamed(name_to_be_Changed,'aggregated').toPandas()

但是,是否可以通过.alias()做到这一点?我见过这样使用

group_sorted = pyspark_df.groupby(dateVar,seriesname).agg(sum(aggSeriesname).alias('aggregated')).toPandas()

如何以不必键入'sum(aggSeriesname)'部分的方式使用别名?希望我很清楚。

xiezhanliang 回答:是否可以在Pyspark中将.agg(dictionary)合并并使用.alias()重命名结果列?

我不确定您为什么要问这个问题,因此无法提供适当的替代解决方案。据我所知,不可能合并.agg(dictionary)并用.alias重命名结果列。 withColumnRenamed是解决此问题的方法。

您还可以执行selectExpr

vertices = sqlContext.createDataFrame([
  ("a","Alice",34),("b","Bob",36),("c","Charlie",30),("d","David",29),("e","Esther",32),("f","Fanny",("g","Gabby",60)],["id","name","age"])

aggSeriesName = 'age'
aggType = 'sum'
targetName = 'aggregated'

bla = vertices.selectExpr('{}({}) as {}'.format(aggType,aggSeriesName,targetName))
bla.show()

输出:

+----------+
|aggregated|
+----------+
|       257|
+----------+
本文链接:https://www.f2er.com/3108271.html

大家都在问