【问题标题】:How to Compute Sum of Dictionary Field in Spark with Python?如何使用 Python 计算 Spark 中字典字段的总和?
【发布时间】:2016-05-01 06:28:59
【问题描述】:

我的数据保存在 Spark RDD 中,其结构如下:

survivors.take(3)
Out[45]:
[{'Age': '38',
  'Cabin': 'C85',
  'Embarked': 'C',
  'Fare': '71.2833',
  'Name': 'Cumings, Mrs. John Bradley (Florence Briggs Thayer)',
  'Parch': '0',
  'PassengerId': '2',
  'Pclass': '1',
  'Sex': 'female',
  'SibSp': '1',
  'Survived': '1',
  'Ticket': 'PC 17599'},
 {'Age': '26',
  'Cabin': '',
  'Embarked': 'S',
  'Fare': '7.925',
  'Name': 'Heikkinen, Miss. Laina',
  'Parch': '0',
  'PassengerId': '3',
  'Pclass': '3',
  'Sex': 'female',
  'SibSp': '0',
  'Survived': '1',
  'Ticket': 'STON/O2. 3101282'},
 {'Age': '35',
  'Cabin': 'C123',
  'Embarked': 'S',
  'Fare': '53.1',
  'Name': 'Futrelle, Mrs. Jacques Heath (Lily May Peel)',
  'Parch': '0',
  'PassengerId': '4',
  'Pclass': '1',
  'Sex': 'female',
  'SibSp': '1',
  'Survived': '1',
  'Ticket': '113803'}]

我想使用 reduce 计算上述字典的“年龄”列的总和。我正在尝试这样做:

survivors.reduce(lambda row, acc: acc + float(row['Age']))

但是,我没有任何运气。我不是python专家,所以也许这是一个python问题。

【问题讨论】:

标签: python apache-spark pyspark reduce rdd


【解决方案1】:

我会改用求和图。

 sum(list(map(lambda row: row['Age'],survivors.take(3))))

【讨论】:

  • 这不起作用,我收到以下错误。 TypeError: 'PipelinedRDD' object is not iterable 是否与“幸存者”成为 Spark 中的 RDD 有关?
  • 从您的输出中,survivers.take(3) 是一个字典列表。我会更新解决方案。
【解决方案2】:

你得到了 reduce 的错误方法的参数,你需要先有累加器,你还需要把累加器变成一个字典。

survivors.reduce(lambda acc, row: {'Age': float(acc['Age']) + float(row['Age'])})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多