Python 从pyspark中基于两个rdd的第一个rdd重复计数创建对rdd?

Python 从pyspark中基于两个rdd的第一个rdd重复计数创建对rdd?,python,apache-spark,dataframe,pyspark,rdd,Python,Apache Spark,Dataframe,Pyspark,Rdd,我已经创建了2个Rdd,如下所示 rd2=sc.parallelize([['A', 'B','D'], ['B', 'C'], ['A', 'B'],['B']]) rd3=sc.parallelize([['A', 'B'],['B', 'C'],['B','D']]) rd2.collect() [['A', 'B','D'], ['B', 'C'], ['A', 'B'],['B']] rd3.collect() [['A', 'B'], ['B', 'C'],['B','D']] 现

我已经创建了2个Rdd,如下所示

rd2=sc.parallelize([['A', 'B','D'], ['B', 'C'], ['A', 'B'],['B']])
rd3=sc.parallelize([['A', 'B'],['B', 'C'],['B','D']])
rd2.collect()
[['A', 'B','D'], ['B', 'C'], ['A', 'B'],['B']]
rd3.collect()
[['A', 'B'], ['B', 'C'],['B','D']]
现在我想将rd2中rdd的重复计数中的公共元素作为新rd4中的一个值进行计数

['A','B']
在两个rdd中都很常见,但rd2中的重复计数是2

我期望的rd4是:

[(['A','B'],2),(['B','C'],1),(['B','D'],1)]

您可以使用rdd上的
countByKey
检查重复计数,它将返回
defaultdict

但您说过希望结果为
rdd
,因此可以使用
reduceByKey
函数

我将创建与您相同的rdd

rd2=sc.parallelize([['A', 'B'], ['B', 'C'], ['A', 'B'],['B']])

rd2.map(lambda x: (tuple(x),1)).reduceByKey(lambda x,y: x+y).collect()
[(('B',), 1), (('A', 'B'), 2), (('B', 'C'), 1)]
现在您已经将输出rdd设置为
(tuple,count)
结构,您可以通过
map
函数将其更改为list

rd2.map(lambda x: (tuple(x),1)).reduceByKey(lambda x,y: x+y).map(lambda x: (list(x[0]),x[1])).collect()
[(['B'], 1), (['A', 'B'], 2), (['B', 'C'], 1)] 

我希望这能解决您的问题。

如果您可以使用数据帧而不是RDD,这将是一个sipmle连接,后面是聚合计数a您的正确答案,但根据我的要求,我不应该在每个问题中使用DF'SA,我想计算RDD的rd3中的公共元素,rd2.rd2中的重复计数作为新rd4 rdd中的值。但根据您的代码,您不考虑rd3。上述情况将失败。请在这方面帮助我。提前谢谢。那么你的预期产量是多少@根据我的问题,我们应该考虑两个RDDS,但是我们不考虑基于RD3元素的RD3,我们应该计算RD2元素。请看一下,我已经更新了我的问题以便于理解。