如何将参数传递给agg PySpark函数的字典输入

4

来自pyspark文档,我可以做到:

gdf = df.groupBy(df.name)
sorted(gdf.agg({"*": "first"}).collect())

在我的实际使用案例中,我有很多变量,所以我喜欢可以简单地创建一个字典,这就是为什么:

gdf = df.groupBy(df.name)
sorted(gdf.agg(F.first(col, ignorenulls=True)).collect())

@lemon的建议对我无效。

如何为first传递参数(即ignorenulls=True),请参见此处

2个回答

4

你可以使用列表推导式。

gdf.agg(*[F.first(x, ignorenulls=True).alias(x) for x in df.columns]).collect()

2

尝试直接调用pyspark函数:

import pyspark.sql.functions as F

gdf = df.groupBy(df.name)

parameters = {'col': <your_column_name, 'ignorenulls': True}
sorted(gdf.agg(F.first(**parameters)).collect())

这对你有用吗?

附注:ignorenulls 默认为 True。


这个确实行得通,但我有很多变量要处理,所以我想用字典方式来实现,我会在我的问题中澄清这一点。 - safex
@safex 我已经更新了答案,对函数参数值进行了必要的概括。如果您还需要对函数名称进行概括,可以使用按名称调用来实现。有关详细信息,请参见此处:https://dev59.com/p3VD5IYBdhLWcg3wXaYd。 - lemon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接