Spark, как разбить (список ключ-значение) на пары ключ-значение - PullRequest
1 голос
/ 07 апреля 2019

Для СДР с несколькими парами ключ-значение, где каждое значение на самом деле является списком значений, как мне разделить списки значений, чтобы я в итоге получил простые пары ключ-значение?

from pyspark import SparkConf, SparkContext
conf = SparkConf()
sc = SparkContext(conf=conf)
foo = sc.parallelize([(0,[1,1,4]),(1,[3,5])])
bar = foo.map(magic)
bar.collect()
>>>>[(0,1),(0,1),(0,4),(1,3),(1,5)]

Как бы выглядел magic, чтобы достичь того, чего я хочу?

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Разобрался:

bar=foo.flatMap(lambda l: [(l[0], value) for value in l[1]])

Я понимаю, что это довольно простая проблема и решение, но я оставлю это на всякий случай, если кто-то еще пытается начать с pyspark.

0 голосов
/ 07 апреля 2019

Python позволяет вам произвольно комбинировать множество выражений генератора, что позволяет вам «развернуть» вложенную структуру, подобную этой. Каждый «слой» будет новым for _ in _

lambda l: [(key, value) for (key, values) in l for value in values]
>>> l = [(0,[1,1,4]),(1,[3,5])]
>>> [(key, value) for (key, values) in l for value in values]
[(0, 1), (0, 1), (0, 4), (1, 3), (1, 5)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...