我试图做一个元素的求和,我已经创建了这个虚拟的df。输出应该是 [10,4,4,1]
```
from pyspark.sql.types import StructType,StructField, StringType, IntegerType, ArrayType
data = [
("James",[1,1,1,1]),
("James",[2,1,1,0]),
("James",[3,1,1,0]),
("James",[4,1,1,0])
]
schema = StructType([
StructField("firstname",StringType(),True),
StructField("scores", ArrayType(IntegerType()), True)
])
df = spark.createDataFrame(data=data,schema=schema)
posexplode可以工作,但是我的实际df太大了,所以我尝试使用fold,但是它给了我一个错误。有什么想法吗?谢谢!
vec_df = df.select("scores")
vec_sums = vec_df.rdd.fold([0]*4, lambda a,b: [x + y for x, y in zip(a, b)])
文件“<ipython-input-115-9b470dedcfef>”,第2行,在<listcomp>
typeerror:不支持+:“int”和“list”的操作数类型
1条答案
按热度按时间snvhrwxg1#
之前需要将行的rddMap到列表的rdd
fold
:为了帮助理解,您可以查看RDD的外观。
所以你可以想象
vec_df.rdd
包含嵌套列表,需要在fold
.