2017-04-16 65 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)替換整個內部循環' –