我们可以在pyspark中使用join函数连接两个带有两个键的rdd吗?

时间:2017-11-16 13:08:50

标签: pyspark

例如:

rdd1 = [('magnus', 'nordea', 13000), ('Erik', 'nordea', 13000), ('Ola', 'nordea', 19000), ('rohit', 'nordea', 23030)]
rdd2 = [('magnus', 'jpmc', 14000), ('Erik', 'jpmc', 2100), ('Ola', 'jpmc', 18400), ('rohit', 'jpmc', 25000)]


rdd1.join(rdd2).collect() gives me :
[('Ola', ('nordea', 'jpmc')), ('Erik', ('nordea', 'jpmc')), ('rohit', ('nordea', 'jpmc')), ('magnus', ('nordea', 'jpmc'))] 

上述rdd失去其金额值:(

必需的输出:

[(('Ola','nordea'),13000),
 (('Ola','jpmc'),14000),
 (('Erik','nordea'),13000),
 (('Erik','jpmc'),2100),
 (('rohit','nordea'),23030), 
 (('rohit','jpmc'),25000), 
 (('magnus','nordea'),13000),
 (('magnus', 'jpmc'),14000)]

有关它的任何建议或我应该参考什么功能?

2 个答案:

答案 0 :(得分:0)

.btn-content

结果:

spark.version
#  u'2.2.0'

rdd1 = sc.parallelize([('magnus', 'nordea', 13000), ('Erik', 'nordea', 13000), ('Ola', 'nordea', 19000), ('rohit', 'nordea', 23030)])
rdd2 = sc.parallelize([('magnus', 'jpmc', 14000), ('Erik', 'jpmc', 2100), ('Ola', 'jpmc', 18400), ('rohit', 'jpmc', 25000)])

rdd1.union(rdd2).map(lambda x: ((x[0], x[1]), x[2])).collect()

答案 1 :(得分:0)

     rdd1.union(rdd2).collect()

输出:

    [('magnus', 'nordea', 13000),
     ('Erik', 'nordea', 13000),
     ('Ola', 'nordea', 19000),
     ('rohit', 'nordea', 23030),
     ('magnus', 'jpmc', 14000),
     ('Erik', 'jpmc', 2100),
     ('Ola', 'jpmc', 18400),
     ('rohit', 'jpmc', 25000)]