如何展平在 PySpark 中使用 zip 转换创建的元组
How to flatten tuple created using zip transformation in PySpark
我有两个 RDD - RDD1 和 RDD2,结构如下:
RDD1:
[(u'abc', 1.0), (u'cde', 1.0),....]
RDD2:
[3.0, 0.0,....]
现在我想形成第三个 RDD,其值来自上述两个 RDD 的每个索引。所以上面的输出应该变成:
RDD3:
[(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 的值之间有 ()
.[=17= 的分隔]
注意: 我的 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]))
在Python2中可以使用:
rdd1.zip(rdd2).map(lambda ((x1, x2), y): (x1, x2, y))
但在 Python 3.
中不再支持它
如果要提取更多值,使用索引可能会很乏味
lambda t: (t[0][0], t[0][1], t[0][2], ..., t[1]))
所以你可以尝试这样的事情:
lambda t: tuple(list(t[0]) + [t[1]])
或像这里一样实施更复杂的解决方案:Flatten (an irregular) list of lists
我有两个 RDD - RDD1 和 RDD2,结构如下:
RDD1:
[(u'abc', 1.0), (u'cde', 1.0),....]
RDD2:
[3.0, 0.0,....]
现在我想形成第三个 RDD,其值来自上述两个 RDD 的每个索引。所以上面的输出应该变成:
RDD3:
[(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 的值之间有 ()
.[=17= 的分隔]
注意: 我的 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]))
在Python2中可以使用:
rdd1.zip(rdd2).map(lambda ((x1, x2), y): (x1, x2, y))
但在 Python 3.
中不再支持它如果要提取更多值,使用索引可能会很乏味
lambda t: (t[0][0], t[0][1], t[0][2], ..., t[1]))
所以你可以尝试这样的事情:
lambda t: tuple(list(t[0]) + [t[1]])
或像这里一样实施更复杂的解决方案:Flatten (an irregular) list of lists