我已经创建了2个RDD's
,如下所示:
rdd1 = sc.parallelize([(u'176', u'244', -0.03925566875021147), (u'28', u'244', 0.9175106515709205), (u'165', u'244', -0.3837580218245722), (u'181', u'244', 0.29145693160561503), (u'161', u'244', -0.503468718448459), (u'28', u'275', 1.1636548589189926), (u'165', u'275', -1.026158464467282), (u'181', u'275', 0.6685791983070568)])
rdd2 = sc.parallelize([(u'176', u'244'), (u'28', u'244'), (u'165', u'244'), (u'165', u'275'), (u'181', u'275'), (u'141', u'388'), (u'154', u'238')])
我的预期输出应如下所示:
[(u'176', u'244', -0.03925566875021147,1), (u'28', u'244', 0.9175106515709205,1), (u'165', u'244', -0.3837580218245722,1), (u'181', u'244', 0.29145693160561503,0), (u'161', u'244', -0.503468718448459,0), (u'28', u'275', 1.1636548589189926,0), (u'165', u'275', -1.026158464467282,1), (u'181', u'275', 0.6685791983070568,1)]
我想加入两个rdds,添加加入状态,例如1或0。
在rdd1中第一个元组为(u'176', u'244', -0.03925566875021147)
,并且rdd2包含
(u'176', u'244')
,rdd1,rdd2的前两个元素相同,则我的预期输出为(u'176', u'244', -0.03925566875021147,1)
。
对于Rdd1:(u'181', u'275', 0.6685791983070568)
和Rdd2:(u'181', u'275')
的输出将是(u'181', u'275', 0.6685791983070568,1)
。
其他情况:
rdd1包含(u'181', u'244', 0.29145693160561503)
,但rdd2不包含任何类似(u'181', u'244')
的元组,因此预期输出将为(u'181', u'244', 0.29145693160561503,0)
我通过创建数据框实现了此目的,但是我不想使用数据框联接。请帮助这个如何使用rdds。
答案 0 :(得分:0)
要以rdd方法执行此操作,必须将rdd与要连接的列配对,然后执行此连接和其他连接的左外部连接。对于其中的每个元素(k,v),生成的RDD要么包含其他w的所有对(k,(v,Some(w))),要么包含不存在的对(k,(v,None))其他元素的键为k。
userRDD.leftOuterJoin(empRDD).collect {
case (String, (firstrddvalue, None)) => (k,v,0)
case (String, (firstrddvalue,secondrddvalue))=>(k,v,1)
}
答案 1 :(得分:0)
我想加入两个rdds,添加加入状态,例如1或0
要加入rdd,您需要 pairedRdd
pairedRdd1 = rdd1.map(lambda x: ((x[0], x[1]), x[2:]))
pairedRdd2 = rdd2.map(lambda x: ((x[0], x[1]), 1))
在这里,我在1
中填充了pairedRdd2
,因为您的输出要求是从rdd1匹配rdd2必须有1。
然后最后,使用leftOuterJoin
和一些操作来获得预期的输出
finalRdd = pairedRdd1.leftOuterJoin(pairedRdd2).map(lambda x: tuple(list(x[0]) + list(x[1][0]) + [0 if(x[1][1] == None) else 1]))
#[('161', '244', -0.503468718448459, 0),('165', '244', -0.3837580218245722, 1),('181', '244', 0.29145693160561503, 0),('165', '275', -1.026158464467282, 1),('181', '275', 0.6685791983070568, 1),('176', '244', -0.03925566875021147, 1),('28', '275', 1.1636548589189926, 0),('28', '244', 0.9175106515709205, 1)]
我希望答案会有所帮助