将不同长度的变量传递给 PySpark groupby().agg 函数

Passing varying length variables to a PySpark groupby().agg function

我正在将不同长度的列名列表传递给 PySpark 的 groupby().agg 函数?我编写的代码检查列表的长度,例如,如果它的长度为 1,它将对一个元素执行 .agg(count)。如果列表的长度为 2,它将执行两个单独的 .agg(counts) 生成两个新的 .agg 列。

有没有比通过 if 语句更简洁的写法,因为随着列名列表变长,我将不得不添加更多的 elif 语句。

例如:

agg_fields: 列名列表

if len(agg_fields) == 1:
    df = df.groupBy(col1, col2).agg(count(agg_fields[0]))

elif len(agg_fields) == 2:
    df = df.groupBy(col1, col2).agg(count(agg_fields[0]), \
                                    count(agg_fields[1]))

是的,您可以简单地循环创建聚合语句:

agg_df = df.groupBy("col1","col2").agg(*[count(i).alias(i) for i in agg_fields])