Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 如何在PySpark中展平使用zip转换创建的元组_Python_Apache Spark_Ipython_Pyspark_Rdd - Fatal编程技术网

Python 如何在PySpark中展平使用zip转换创建的元组

Python 如何在PySpark中展平使用zip转换创建的元组,python,apache-spark,ipython,pyspark,rdd,Python,Apache Spark,Ipython,Pyspark,Rdd,我有两个RDD——RDD1和RDD2,结构如下: RDD1: [(u'abc', 1.0), (u'cde', 1.0),....] [3.0, 0.0,....] [(u'abc', 1.0,3.0), (u'cde', 1.0,0.0),....] RDD2: [(u'abc', 1.0), (u'cde', 1.0),....] [3.0, 0.0,....] [(u'abc', 1.0,3.0), (u'cde', 1.0,0.0),....] 现在我想形成第三个RDD,它将

我有两个RDD——RDD1和RDD2,结构如下:

RDD1:

[(u'abc', 1.0), (u'cde', 1.0),....]
[3.0, 0.0,....]
[(u'abc', 1.0,3.0), (u'cde', 1.0,0.0),....]
RDD2:

[(u'abc', 1.0), (u'cde', 1.0),....]
[3.0, 0.0,....]
[(u'abc', 1.0,3.0), (u'cde', 1.0,0.0),....]
现在我想形成第三个RDD,它将上述两个RDD的每个索引的值合并在一起。因此,上述输出应为:

RDD3:

[(u'abc', 1.0), (u'cde', 1.0),....]
[3.0, 0.0,....]
[(u'abc', 1.0,3.0), (u'cde', 1.0,0.0),....]
如您所见,RDD2中的值被添加到RDD1的元组中。我该怎么做?我试着做
RDD3=RDD1.map(lambda x:x).zip(RDD2)
,但它产生了这个输出-
[((u'abc',1.0),3.0),((u'cde',1.0),0.0),…]
,这不是我想要的,因为你可以看到,
()
在RDD1和RDD2的值之间有一个分隔


注意:我的RDD1是使用-
RDD1=data.map(lambda x:[x[0]).zip(val)形成的。

压缩后,您可以简单地重塑数据:

rdd1 = sc.parallelize([(u'abc', 1.0), (u'cde', 1.0)])
rdd2 = sc.parallelize([3.0, 0.0])

rdd1.zip(rdd2).map(lambda t: (t[0][0], t[0][1], t[1]))
在Python 2中,可以使用:

rdd1.zip(rdd2).map(lambda ((x1, x2), y): (x1, x2, y))
但是Python3不再支持它

如果要提取更多的值,使用索引可能会很乏味

lambda t: (t[0][0], t[0][1], t[0][2], ..., t[1]))
因此,您可以尝试以下内容:

lambda t: tuple(list(t[0]) + [t[1]])

或者实施一个更复杂的解决方案,如下图所示:

您只需在压缩后重新塑造数据:

rdd1 = sc.parallelize([(u'abc', 1.0), (u'cde', 1.0)])
rdd2 = sc.parallelize([3.0, 0.0])

rdd1.zip(rdd2).map(lambda t: (t[0][0], t[0][1], t[1]))
在Python 2中,可以使用:

rdd1.zip(rdd2).map(lambda ((x1, x2), y): (x1, x2, y))
但是Python3不再支持它

如果要提取更多的值,使用索引可能会很乏味

lambda t: (t[0][0], t[0][1], t[0][2], ..., t[1]))
因此,您可以尝试以下内容:

lambda t: tuple(list(t[0]) + [t[1]])

或者实现一个更复杂的解决方案,如这里所示:

使用后续映射来创建所需的元组。@Marcin我做了
RDD3=RDD1.map(lambda x:x).zip(RDD2)
就像我在上面的帖子中提到的那样,但这并不能生成所需的输出;另外,你的映射是不可操作的,因为它应用了身份转换。使用后续映射来创建你想要的元组。@Marcin我做了
RDD3=RDD1.map(lambda x:x).zip(RDD2)
,就像我在上面的帖子中提到的那样,但这不会产生所需的输出;此外,你的地图是一个无操作,因为它应用了身份转换。