Понимание списка Python с преобразованием лямбда-функции - PullRequest
0 голосов
/ 19 апреля 2019

Предположим, для простоты у меня есть этот небольшой корпус, состоящий всего из двух строк.

'This is first'
'This is second'

Чтобы использовать его в моем искровом методе ReduceByKey, мне нужно иметь следующий вывод:

[((u'This', u'is'), 1), ((u'is', u'first.'), 1), ((u'This', u'is'), 1), ((u'is', u'second.'), 1)]

но с кодом, который я написал ниже, я взял следующий формат (больше списков).Убедитесь, что мое решение по желанию находится внутри одного «списка», но вывод, который я получаю, имеет больше (в зависимости от количества слов в предложении)

[[((u'This', u'is'), 1), ((u'This', u'first.'), 1)], [((u'is', u'first.'), 1)], [((u'This', u'is'), 1), ((u'This', u'second.'), 1)], [((u'is', u'second.'), 1)]]

Как изменить это, чтобы получить то, что я хочу.

couples = lines.map(lambda s : s.split(" ")).flatMap(lambda s: [[((s[i],s[j]), 1) for j in range(i+1 , len(s))] for i in range(len(s)-1) ])

Если кто-то не знает pyspark, но хороший python, я хочу изменить эту часть:

lambda s: [[((s[i],s[j]), 1) for j in range(i+1 , len(s))] for i in range(len(s)-1) ]

Заранее спасибо

1 Ответ

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

В python нет такого понятия, как расширение возвращаемого значения. Это означает, что вам нужно явно выписать свои возвращаемые значения. Что означает, что лямбда должна вернуть список. Сглаживание списка должно быть выполнено снаружи. Это может быть реализовано по-разному. Например,

reduce(lambda a,b: a+b, lines.map(...).flatMap(...))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...