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

感谢您的输入 –