假设我有固定的python列表 [1,2] 我有一个rdd有两个项目 [('hi', 'bye'), ('hi', 'bye')] 我希望每一件物品
[1,2]
[('hi', 'bye'), ('hi', 'bye')]
('hi', 'bye', 1) ('hi', 'bye', 2)
本质上是将列表中的每一项附加到rdd中的每一项。我觉得这应该很简单,但我想不出其中的逻辑:/
fnatzsnv1#
尝试匹配模式
a = [1,2] b = [('hi', 'bye'), ('hi', 'bye')]
print([(x, y, z) for ((x, y), z) in zip(b, a)])
输出:
[('hi', 'bye', 1), ('hi', 'bye', 2)]
nom7f22z2#
我想,这应该能解决你的问题。试试这个代码。
your_list = [1,2] your_rdd = [('hi', 'bye'), ('hi', 'bye')] print([(x, y, z) for ((x, y), z) in zip(your_rdd, your_list)])
解释:你可以用 str 简单的元素。假设您有一个rdd,并且每个项都是
str
(key, [ele1, ele2, ele3, ..., elen])
每个项都是一个键值对,值是元素列表。您想解压列表,这样我就可以创建一个新的rdd,其中每个项都包含一个元素,如下所示:
(key, ele1) (key, ele2) (key, ele3) . . . (key, ele4)
例如,为了简单起见,可以使用str元素。
>>> rdd = sc.parallelize([('key', ['ele1', 'ele2'])]) >>> rdd.flatMap(lambda data: [(data[0], x) for x in data[1]]).collect() [('key', 'ele1'), ('key', 'ele2')]
ql3eal8s3#
你可以用 zip rdd方法:
zip
rdd1 = sc.parallelize([('hi', 'bye'), ('hi', 'bye')]) rdd2 = sc.parallelize([1, 2]) rdd3 = rdd1.zip(rdd2).map(lambda x: (x[0][0], x[0][1], x[1])) rdd3.collect() # [('hi', 'bye', 1), ('hi', 'bye', 2)]
3条答案
按热度按时间fnatzsnv1#
尝试匹配模式
输出:
nom7f22z2#
我想,这应该能解决你的问题。试试这个代码。
解释:
你可以用
str
简单的元素。假设您有一个rdd,并且每个项都是
每个项都是一个键值对,值是元素列表。
您想解压列表,这样我就可以创建一个新的rdd,其中每个项都包含一个元素,如下所示:
例如,为了简单起见,可以使用str元素。
ql3eal8s3#
你可以用
zip
rdd方法: