使用reducebykey抛出int对象是不可下标的错误

zfciruhq  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(239)

这段代码给了我一个“int object is not subscriptable”错误,尽管它为我的一个朋友工作。错误出现在第四行,我试图用reducebykey来计算平均值。为什么会这样?

nonNullRDD = marchRDD.filter(lambda row: row.journal).filter(lambda row: row.abstract)
abstractRDD = nonNullRDD.map(lambda field: (field.journal, field.abstract))
splitRDD = abstractRDD.map(lambda word: (word[0], len(word[1].split(" "))))
groupedRDD = splitRDD.reduceByKey(lambda x, y: (x[0]+y[0], x[1]+y[1])).mapValues(lambda x: x[0]/x[1])
6ojccjat

6ojccjat1#

reduceByKey 函数,则提供一个lambda函数,该函数作用于rdd的值,rdd是 len(word[1].split(" ")) . 你试过了 x[0] 在一个整数上,这将导致您得到的错误。
我相信rdd应该是 (key, (value, 1)) 因此,代码的第四行将给出每个键的平均值。为了实现这一点,您可以将第三行中的lambda函数更改为:

splitRDD = abstractRDD.map(lambda word: (word[0], (len(word[1].split(" ")), 1)))

相关问题