我有两个spark RDD,A有301500000行,B有1500000行。B中的150万行也出现在A中。我想要这两个RDD之间的设置差异,这样我返回的A包含300000000行,而B中的1500000行不再存在于A中
我不能使用Spark数据帧。在
这是我现在使用的系统。这些RDD有主键。下面我要做的是创建一个(收集的)出现在B中的主键的列表,然后迭代a的主键,找到那些没有出现在B主键列表中的主键。在
a = sc.parallelize([[0,"foo",'a'],[1,'bar','b'],[2,'mix','c'],[3,'hem', 'd'],[4,'line','e']])
b = sc.parallelize([[1,'bar','b'],[2,'mix','c']])
b_primary_keys = b.map(lambda x: x[0]).collect() # since first col = primary key
def sep_a_and_b(row):
primary_key = row[0]
if(primary_key not in b_primary_keys):
return(row)
a_minus_b = a.map(lambda x: sep_a_and_b(x)).filter(lambda x: x != None)
现在,这在这个示例问题中有效,因为A和B都很小。然而,当我使用真实的数据集A和B时,这是不成功的。有没有更好的(更并行的)方法来实现这一点?在
这似乎可以用
subtractByKey
来解决要更改为键值:
^{pr2}$*请注意,我的python很弱,可能有更好的方法来分割值
相关问题 更多 >
编程相关推荐