首页 > 解决方案 > 如何将可变数量的变量传递给pyspark select表达式

问题描述

我有一个简单的 pyspark 函数

features=['x', 'y', 'z']
def f(features):
    df.groupBy('id').agg(collect_list(features[0]), collect_list(features[1]), ....)

我想要这样,如果有人传入 features=['x', 'y', 'z', 'a'] 在 features 中的每个东西都会在 agg 函数中有自己的 collect_list 函数。我怎样才能做到这一点?它们都必须在同一个 agg 函数中

标签: pythonpython-3.xpyspark

解决方案


features=['x', 'y', 'z']
def f(features):
    df.groupBy("id").agg(*[collect_list(feature) for feature in features ])

features数组元素将在agg函数内部进行迭代,并为每个特征创建一个聚合列。

要为聚合列派生自定义列名称,

df.groupBy("id").agg(*[F.collect_list(feature).alias("%s_list" % (feature)) for feature in features ])

请参阅此链接了解更多详情。


推荐阅读