亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有元組值的Spark Python中的reduceByKey

具有元組值的Spark Python中的reduceByKey

開心每一天1111 2021-04-09 14:15:32
我的RDD為(key, (val1,val2))。為此rdd,我想應用reduceByKey函數,我的要求是val2針對單個鍵找到的最小值,并提取val1結果的最小值val2。例如:(1,(a,4)),(2,(b,3)),(1,(c,2)),(2,(d,1)) 在此,我希望結果集為(1,(c,2)),(2,(d,1))我在python代碼下面有想法,但是在這里我得到了第一個val1,而不是val1與minimum對應的代碼val2。rdd2 = rdd1.map(lambda x:(x[0],(x[1],x[3])))rdd3 = rdd2.reduceByKey(lambda x,y:(x[0],min(x[1],y[1])))請幫助我修改代碼,以便獲得所需的結果。
查看完整描述

3 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

你需要的一切都if else在reduceByKey功能


rdd3 = rdd2.reduceByKey(lambda x, y: x if(x[1] < y[1]) else y)

這應該給你你想要的輸出為


#(1, ('c', 2))

#(2, ('d', 1))

我希望答案是有幫助的


查看完整回答
反對 回復 2021-04-20
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

在這里,我將通過使用scala獲得所需的結果,因為我現在已經學到了更多scala,所以我現在可以回答我自己的問題,如下所示:


val list = List((1,('a',4)),(2,('b',3)),(1,('c',2)),(2,('d',1)))

val rdd = sc.parallelize(list)

rdd.reduceByKey((rec1,rec2) => if(rec1._2 > rec2._2) rec2 else rec1).foreach(println)

輸出:


(2,(d,1))


(1,(c,2))


我在這里提到了此代碼,因為其他人可以參考并發現它很有用。謝謝...


查看完整回答
反對 回復 2021-04-20
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

min與key參數一起使用:


from functools import partial

from operator import itemgetter


rdd.reduceByKey(partial(min, key=itemgetter(1)))


查看完整回答
反對 回復 2021-04-20
  • 3 回答
  • 0 關注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號