Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并键不相同但相关的两个RDD_Python_Apache Spark_Join_Rdd - Fatal编程技术网

Python 合并键不相同但相关的两个RDD

Python 合并键不相同但相关的两个RDD,python,apache-spark,join,rdd,Python,Apache Spark,Join,Rdd,在pyspark中,考虑到以下两种RDD: rrd1=[('my name',5),('name is',4)] 及 rdd2=[('my',6),('name',10),('is',5)] 其中rdd1是bigram和counts的元组,rdd2是对应的unigram和counts的元组, 我想要一个包含3个元素的元组的RDD,如: RDD=[('my name',5),('my',6),('name',10)),('name is',4),('name',10),('is',5))] 我尝试

在pyspark中,考虑到以下两种RDD:

rrd1=[('my name',5),('name is',4)]

rdd2=[('my',6),('name',10),('is',5)]

其中rdd1是bigram和counts的元组,rdd2是对应的unigram和counts的元组, 我想要一个包含3个元素的元组的RDD,如:

RDD=[('my name',5),('my',6),('name',10)),('name is',4),('name',10),('is',5))]


我尝试了
rdd2.union(rdd1).reduceByKey(lambda x,y:x+y)
,但在这种情况下,这不是正确的方法,因为键不同,但在某种意义上它们是相关的您可以这样做;拆分bigram rdd以生成一个键与
rdd2
连接,然后按bigram分组以将属于同一个bigram的元素收集在一起:

(rdd1.flatMap(lambda x: [(w, x) for w in x[0].split()])    
     .join(rdd2.map(lambda x: (x[0], x)))
     .map(lambda x: x[1])
     .groupBy(lambda x: x[0])
     .map(lambda kv: (kv[0],) + tuple(v[1] for v in kv[1]))
     .collect())

# [(('name is', 4), ('name', 10), ('is', 5)), (('my name', 5), ('name', 10), ('my', 6))]

您使用的是python还是scala?您标记了python,但您的代码是scala?我使用的是python,示例只是以元组列表的形式显示rdd。我不认识斯卡拉!有没有什么方法可以保持顺序,比如在第二个元组中,('name',10)和('my',6)的顺序与二元组中的'my name'不一样我想有一些类似于
[('name Is',4),('name',10),('Is',5)),('my name',5),('my',6),('name',10)]