函数foldByKey:使用元组中的整数进行计算,给出“int object not subscriptable”

2024-10-04 03:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉databricks和Pypark。在尝试一些我学到的东西时,我遇到了以下问题。任何帮助都会很好

我有一个RDD(学生姓名、科目、分数)。我试图添加某个学生所有科目的分数,并使用foldByKey生成一个输出,如(学生姓名,总分)

我的代码:

newRdd = sc.parallelize([
  ("Joseph","maths",4),("Joseph","science",1)])

def addFunc(accumulator, element):
  return accumulator + element[1]

newRdd.map(lambda t: (t[0],(t[1],t[2]))).foldByKey(0, addFunc).collect()

获取错误**”

int object is not subscriptable

对于函数addFunc中的return语句,我认为它是由element[1]内部addFunc引起的

我认为foldByKey会将元组("maths",4)("science",1)发送到addFunc参数element,因此我需要使用element[1]从元组中提取标记并将其添加到accumulator

如果我只使用没有下标的return accumulator + element,那么我会得到一个错误

TypeError : unsupported operand type(s) for +: 'int' and 'tuple'

可能是因为element接收元组("maths",4)("science",1)

如果我使用return accumulator + element[0],那么我会得到错误

TypeError : unsupported operand type(s) for +: 'int' and 'str'

我认为这是因为在本例中element[0]将主题名称提取为字符串

对foldByKey如何遍历rdd以及参数如何传递给addFunc的解释将非常有助于理解出现错误的原因


Tags: return错误element学生分数intscience元组