我不熟悉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的解释将非常有助于理解出现错误的原因
你可以试试这个
相关问题 更多 >
编程相关推荐