如何将列表中的值添加到rdd的每个项中?

h43kikqp  于 2021-07-09  发布在  Spark
关注(0)|答案(3)|浏览(417)

假设我有固定的python列表 [1,2] 我有一个rdd有两个项目 [('hi', 'bye'), ('hi', 'bye')] 我希望每一件物品

('hi', 'bye', 1)
('hi', 'bye', 2)

本质上是将列表中的每一项附加到rdd中的每一项。我觉得这应该很简单,但我想不出其中的逻辑:/

fnatzsnv

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)]
nom7f22z

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,并且每个项都是

(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')]
ql3eal8s

ql3eal8s3#

你可以用 zip rdd方法:

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)]

相关问题