Taiwan Hadoop Forum

台灣 Hadoop 技術討論區
現在的時間是 2018-07-17, 11:58

所有顯示的時間為 UTC + 8 小時




發表新文章 回覆主題  [ 2 篇文章 ] 
發表人 內容
 文章主題 : 如何重整這段pyspark code以更有效率
文章發表於 : 2014-12-04, 16:09 
離線

註冊時間: 2014-12-01, 09:49
文章: 1
目標: 將資料欄位依照特定key產生mean, min, max, count等描述性指標到local file (目前用json format輸出)
問題: 成功讓key帶出描述指標, 但是程式很醜= =, 而且3.5G資料費時2分鐘, 希望優化code縮短時間. 根據UI的stages說明, 使用到不少shuffle write/read, 如附加檔案

資料範例: 三個欄位, key為Name+Shop, 針對Money整理出描述性指標
Name Shop Money
A Shop001 99.99
A Shop001 87.15
B Shop001 3.99
...

目前的程式, sc進來以後:

代碼:
def tupleDivide(y):
    return float(y[0])/y[1]

def smin(a, b):
    return min(a, b)

def smax(a, b):
    return max(a, b)

raw = sgRDD.map(lambda x: getVar(parserLine(x),list_C+list_N)).cache()
cnt = raw.map(lambda (x,y,z): (x+"_"+y, 1)).countByKey()
sum = raw.map(lambda (x,y,z): (x+"_"+y, z)).reduceByKey(add)
min = raw.map(lambda (x,y,z): (x+"_"+y, z)).reduceByKey(smin)
max = raw.map(lambda (x,y,z): (x+"_"+y, z)).reduceByKey(smax)
raw_cntRDD = sc.parallelize(cnt.items(),3)
raw_mean = sum.join(raw_cntRDD).map(lambda (x, y): (x, tupleDivide(y)))


sgRDD是將data接進來
發現我使用太多重複地code, 卻不曉得該如何修改

懇請給我一些建議, 謝謝!


附加檔案:
2014-12-04_160821.jpg
2014-12-04_160821.jpg [ 184.39 KiB | 被瀏覽 5524 次 ]
回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 如何重整這段pyspark code以更有效率
文章發表於 : 2015-02-13, 17:13 
離線

註冊時間: 2015-02-13, 16:33
文章: 1
FYI
代碼:
def foo(data: RDD[(String, Double)]): RDD[(String, (Double, Double, Double))] = {
    val tmp = data map { case (s, i) =>
      (s, (i, i, i))
    }

   // (sum, max, min)
    val mm = tmp.reduceByKey({ case (v1, v2) =>
      (v1._1 + v2._1, max(v1._2, v2._2), min(v1._3, v2._3))
    })
}


回頂端
 個人資料 E-mail  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 2 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 0 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
正體中文語系由 竹貓星球 維護製作