You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySpark中对DataFrame数组列执行按元素求和?

PySpark数组列按元素求和解决方案

问题描述

我有一个PySpark DataFrame,其中包含一列名为“c1”的数组列,每行均为整数数组,示例数据如下:

c1
[1,2,3]
[4,5,6]
[7,8,9]

需要对该列执行按元素求和(即常规向量加法),最终归约为单个数组[12, 15, 18]。希望实现类似df.select(sum("c1"))的操作,但要针对数组列执行向量/数组加法。

搜索时大多找到基于zip_with和高阶函数的解决方案,但这些方案都是假设存在多列并对行进行求和,可能是表述有误导致的。

补充说明:“c1”列仅为示例,实际场景中该列包含数千行,每个数组有数百个元素。

解决方案

在notNull的帮助下,得出以下解决方案:

# 先获取数组的最大元素个数,超出数组长度的位置会被设为null
max_elements = df.select(max(size("c1"))).first()[0]

# 创建用于select语句的列表达式列表,对每个位置的元素求和
selected_cols = [sum(col("c1")[i]).alias(f"elem_{i}") for i in range(max_elements)]

# 将求和后的单个元素组合成新数组
df_new = df.select(array(*selected_cols).alias("sum_result"))

注:原代码中df_mv_pr和movement_profile应为笔误,已修正为与问题描述一致的df和c1;sum作为别名存在语法冲突,改为sum_result避免问题。

内容的提问来源于stack exchange,提问作者K.Torp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:42:45