Применение лямбда-функций к отдельным объектам RDD - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть rdd, содержащий значения ниже.

rdd_2 = sc.parallelize([('f3.txt', 'of', 0.0),
 ('f3.txt',
  'no',
  0.00023241396735284342),
 ('f3.txt',
  'may',
  0.00042318717429693387),
 ('f3.txt',
  'love',
  0.00036660747046705975),
 ('f3.txt',
  'romantic',
  0.00022935755451437367)])

Я хочу отфильтровать этот RDD по словам ('romantic', 'love'), используя лямбда-функцию, так что мой результат будет:

([('f3.txt', 'of', 0),
 ('f3.txt',
  'no',
  0),
 ('f3.txt',
  'may',
  0),
 ('f3.txt',
  'love',
  1),
 ('f3.txt',
  'romantic',
  1)])

Я пробовал следующий код, но получаю сообщение об ошибке:

querylist = ['romantic', 'love']
q = rdd_2.map(lambda x : x[2]=1 if x[1] not in querylist else x[2]=0)
SyntaxError: invalid syntax

Что мне делать?

1 Ответ

0 голосов
/ 23 февраля 2019

Нельзя назначать такие значения в лямбда-функции.Вместо этого верните новый объект, содержащий измененные значения.

Попробуйте:

querylist = ['romantic', 'love']
q = rdd_2.map(lambda x : (x[0], x[1], 1 if x[1] not in querylist else 0))

Или эквивалентно;

q = rdd_2.map(lambda x : (x[0], x[1], int(x[1] not in querylist)))
...