2017-12-27 226 views
0

我有下面的RDD。Pyspark - 基於RDD中的一個鍵的總和和聚合

[[1,101,001,100,product1], 
[2,102,001,105,product2], 
[3,103,002,101,product3]] 

預期成果是在度假心情

[('001', ['product1','100'],['product2','105']),('002',['product3','101'])] 
+0

多一點上下文將有助於回答這個問題。你想彙總什麼?關鍵是什麼?我現在就認爲嵌套列表中的第三項是你的鑰匙?應該忽略嵌套列表的項目1和2? – DrEigelb

+0

是的。你是對的。第三場是關鍵,第一項和第二項可以忽略 –

+0

imho SO不是一個平臺,你只是在圍欄上拋出一個問題(特別是當提供少量上下文時),並希望有人拋出一個答案。你需要表明,你已經把思想和研究帶入了一個問題。看看SO-Meta的[__我該如何問一個好問題?__](https://meta.stackexchange.com/help/how-to-ask)。這會讓其他人更容易解決問題,並幫助您找到所需的答案。 – DrEigelb

回答

0

的感覺,所以你去:

我認爲,那項3 & 5在嵌套列表應弦...

創建RDD:

ls = [[1,101,"001",100,"product1"], 
[2,102,"001",105,"product2"], 
[3,103,"002",101,"product3"]] 

rdd1 = sc.parallelize(ls) 

這將提供rdd1爲:

[[1, 101, '001', 100, 'product1'], 
[2, 102, '001', 105, 'product2'], 
[3, 103, '002', 101, 'product3']] 

映射:

# discard items 1 & 2; set item 3 as key 
rdd2 = rdd1.map(lambda row: (row[2], [row[4], row[3]])) 
rdd2.collect() 

> [('001', ['product1', 100]), 
> ('001', ['product2', 105]), 
> ('002', ['product3', 101])] 

# group by key and map values to a list 
rdd3 = rdd2.groupByKey().mapValues(list) 
rdd3.collect() 

> [('001', [['product1', 100], ['product2', 105]]), 
> ('002', [['product3', 101]])] 

這是不太你感興趣的輸出,但隨後的RDD被鍵入..

+0

感謝您的輸入 –