将不同长度的变量传递给 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])
我正在将不同长度的列名列表传递给 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])