Katakanlah saya memiliki daftar python biasa [1,2] dan saya memiliki rdd dengan 2 item seperti [('hi', 'bye'), ('hi', 'bye')] dan saya ingin setiap item menjadi

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

Pada dasarnya menambahkan setiap item dari daftar ke setiap item di rdd. Saya merasa ini seharusnya sederhana tetapi saya tidak dapat memikirkan logikanya :/

1
Frying Pan 3 April 2021, 08:29

3 jawaban

Jawaban Terbaik

Anda dapat menggunakan zip metode 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)]
0
mck 3 April 2021, 06:36

Saya pikir, ini harus menyelesaikan masalah Anda. Coba kode ini .

your_list = [1,2]
your_rdd = [('hi', 'bye'), ('hi', 'bye')]
print([(x, y, z) for ((x, y), z) in zip(your_rdd, your_list)])

Penjelasan:

Anda dapat menggunakan elemen str untuk kesederhanaan.

Misalkan , Anda memiliki RDD dan setiap item berbentuk

(key, [ele1, ele2, ele3, ..., elen])

Setiap item adalah pasangan nilai kunci dan nilainya adalah daftar elemen.

Dan Anda ingin membongkar daftar sehingga saya dapat membuat RDD baru dengan setiap item yang berisi satu elemen sebagai berikut:

(key, ele1)
(key, ele2)
(key, ele3)
.
.
.
(key, ele4)

Seperti ini , Anda dapat menggunakan elemen str untuk kesederhanaan.

>>> rdd = sc.parallelize([('key', ['ele1', 'ele2'])])
>>> rdd.flatMap(lambda data: [(data[0], x) for x in data[1]]).collect()
[('key', 'ele1'), ('key', 'ele2')]
0
Sayeed Hossain 3 April 2021, 06:00

Coba cocokkan pola

a = [1,2]
b = [('hi', 'bye'), ('hi', 'bye')]
print([(x, y, z) for ((x, y), z) in zip(b, a)])

Keluaran:

[('hi', 'bye', 1), ('hi', 'bye', 2)]
0
Pluviophile 3 April 2021, 05:41