2017-04-16 66 views
-1

我的元组函数来计算多个运行总计

(something1, 500) 
(something1, 200) 
(something1, 300) 
(something2, 200) 
(something2, 600) 
(something2, 400) 

我写了一个函数pySpark做计算得到的结果是这样的列表。功能基本上需要总结的总发生

(something1, 1000), 
(something2, 1200) 

我的功能至今

   def add_function(key, value): 
      last_key = None 
      recur_total = 0 
      key, value = join_data[0][0], join_data[0][1] 
      if last_key == key: 
       recur_total+ = value 
      else: 
       if last_key: 
         recur_total = value 
      if last_key == key: 
        recur_total = value 
       last_key = key 
       if last_key == key: 
        return(last_key, value) 

问题计数的我面对

  1. 我无法给函数粘贴为pySpark控制台的一个功能。它被分成多个提示。
  2. 它说第6行的语法错误(recur_total + = value)。

我在做什么错,以及如何纠正?

+1

简单地做只要您的缩进是正确的,“多个提示”确实可以正确创建单个函数 –

+0

仔细检查提供语法错误的行上的间距 –

+2

最后一条if语句看起来向内间隔太多。 – synchronizer

回答

1
  1. 我无法将函数作为一个函数粘贴到pySpark控制台。它被分成多个提示。

我不明白你的意思。只要您的缩进是正确的,“多个提示”就可以正确创建单个功能。

  1. 它说在第6行的语法错误(recur_total + = value)。

此错误表示您似乎正在正确粘贴您的代码。要修复该错误,请仔细检查出现语法错误的行的间距。

+0

我已经在记事本中创建了这个功能,每行都在行首开始。所以不应该有缩进问题。这里粘贴的代码已经格式化为可读性 – Raghu

+0

@Raghu in python,缩进非常重要。您必须在记事本中正确缩进才能使您的代码正常工作。我建议下载一个文本编辑器,如Notepad ++,Sublime Text 3或Atom。 –

1

其他人已经指出,问题的答案就适当的缩进,但我的2分钱就整函数本身..

任务要达到可使用groupbyitertools

from itertools import groupby 

data = [ ('something1', 500), 
('something1', 200), 
('something1', 300), 
('something2', 200), 
('something2', 600), 
('something2', 400)] 


for key, group in groupby(data, lambda x: x[0]): 
     result = 0 
     for things in group: 
      result = result + things[1] 
     print(key,result) 
+0

为什么不直接在每个团队上运行总和而不是重新发明轮子?通过任一方式引入group +1。 –

+0

@Mad物理学家喜欢如何? – Pushkr

+0

用'result = sum(x [1] for x)替换整个内部循环' –