Вам нужно использовать функцию flatMap
, для этого также нужно кое-что понять. Вот шаги, чтобы сделать это -
Создать rdd с предоставленными данными -
rdd = sc.parallelize([(['1', '2', '3'], 'abc'), (['4', '5', '6'], 'xyz')])
rdd.collect()
[(['1', '2', '3'], 'abc'),
(['4', '5', '6'], 'xyz')]
Сопоставить значения каждого субключа с формой key,value
pair -
rdd.map(lambda x:[(i,x[1]) for i in x[0]],).collect()
[[('1', 'abc'), ('2', 'abc'), ('3', 'abc')],
[('4', 'xyz'), ('5', 'xyz'), ('6', 'xyz')]]
Наконец, примените flatMap, чтобы разбить его на количество строк -
rdd.map(lambda x:[(i,x[1]) for i in x[0]],).flatMap(lambda x:x).collect()
[('1', 'abc'),
('2', 'abc'),
('3', 'abc'),
('4', 'xyz'),
('5', 'xyz'),
('6', 'xyz')]