2017-12-27 53 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

예. 당신이 올바른지. 3 번째 필드는 열쇠이고 아이템 1과 2는 무시 될 수 있습니다. –

+0

imho는 울타리 너머의 문제를 던집니다 (특히, 약간의 컨텍스트가 제공되는 경우) 그리고 누군가가 대답을 던지기를 희망하는 플랫폼이 아닙니다. 이미 문제에 대한 생각과 연구를했다는 것을 보여줄 필요가 있습니다. 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

입력 해 주셔서 감사합니다. –