python - 如何将可变数量的变量传递给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 函数中
解决方案
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 ])
请参阅此链接了解更多详情。
推荐阅读
- javascript - 在javascript中乘以数组?
- javascript - 在 ReactJS 中成功登录后如何重定向到页面?
- mesh - 是否有任何 C++ 库(用于 Linux)用于修复非流形网格并将其转换为流形几何?
- karate - 如果在空手道框架中满足条件,是否可以定义变量?
- tcl - 如何从特定行获取全名和列号
- git - 在 Git 中有效地对大文件进行小改动?
- c# - 高可用性 TCP 服务器应用程序
- javascript - 在 Laravel Mix 上使用 npm run dev 的跨环境内存泄漏
- android - Firebase Crashlytics 报告
- php - 数组内的 Laravel 复杂验证规则