【问题标题】:Reducing tuple values with reduceByKey in Pyspark在 Pyspark 中使用 reduceByKey 减少元组值
【发布时间】: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

如果 ab 应该得到该对的值,那么元素 2 应该有它的计数器,我无法理解它。将原始数据文件多次映射以提取每次不同的所需值是否更好?我是否应该将每次提取 (key, value) 对的 data 变量与元组所需的值映射?只是我犯了一个编程错误吗?

欢迎任何指导,谢谢!

【问题讨论】:

    标签: python pyspark mapreduce


    【解决方案1】:

    好的,我找到了问题。 例如,当减少 (id, (x, x, 1)), (id, (y, y, 1)), (id, (z, z, 1)) 时,在第一个 reduce 中您将获得 (id, 2), (id, (z, z, 1)) 所以当再次尝试减少时,第一个元素中的数字 2 是不可下标的,我必须在此过程中保留数据结构。

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2015-10-17
      • 2016-12-27
      • 1970-01-01
      • 2018-08-07
      • 2021-10-26
      • 1970-01-01
      • 2017-04-10
      • 2017-01-02
      相关资源
      最近更新 更多