【发布时间】:2020-01-21 17:18:17
【问题描述】:
我开始使用 Pyspark 使用 MapReduce 范例,我遇到了一个问题,我不知道这是编程错误还是我不应该这样做。
我有数据从中提取以下信息,每行带有map:
(id, (date, length, counter)),我这样做是为了从原始数据文件中提取我需要的所有信息并过滤嘈杂的行,这样我就不必再次使用原始数据文件了。顺便说一句:计数器原本是 1,打算以后加法reduceByKey。
现在数据看起来像这样:
data = [('45', ('28/5/2010', 0.63, 1)), ('43', ('21/2/2012', 2.166, 1)), ('9', ('12/1/2009', 2.33, 1))]
首先,我试图计算键值对的数量,所以这是一个简单的reduceByKey 添加计数器,我尝试这样做:data.reduceByKey(lambda a,b: a[2] + b[2]) 提供以下错误TypeError: 'int' object is not subscriptable。
如果 a 和 b 应该得到该对的值,那么元素 2 应该有它的计数器,我无法理解它。将原始数据文件多次映射以提取每次不同的所需值是否更好?我是否应该将每次提取 (key, value) 对的 data 变量与元组所需的值映射?只是我犯了一个编程错误吗?
欢迎任何指导,谢谢!
【问题讨论】: