加入RDD中的特定行

时间:2017-10-15 20:04:25

标签: hadoop apache-spark pyspark

我有这样的RDD:

[('anger', 166),
 ('lyon', 193),
 ('marseilles_1', 284),
 ('nice', 203),
 ('paris_2', 642),
 ('paris_3', 330),
 ('troyes', 214),
 ('marseilles_2', 231),
 ('nantes', 207),
 ('orlean', 196),
 ('paris_1', 596),
 ('rennes', 180),
 ('toulouse', 177)]

我需要将paris_1paris_2paris_3合并到一行paris

我完全不知道如何继续,也没有找到任何答案。

你能帮助我吗?

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式从当前键值获取城市名称,然后按键减少:

import re 
rdd\
    .map(lambda l: (re.sub('[_0-9]', '',l[0]), l[1]))\
    .reduceByKey(lambda x,y: x + y)\

    [('anger', 166),
     ('lyon', 193),
     ('nice', 203),
     ('paris', 1568),
     ('troyes', 214),
     ('marseilles', 515),
     ('nantes', 207),
     ('orlean', 196),
     ('rennes', 180),
     ('toulouse', 177)]