在单独的RDD对象中应用lambda函数

问题描述 投票:1回答:1

我有一个包含以下值的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)])

我希望使用lambda函数通过单词('romantic', 'love')过滤此RDD,这样我的结果输出为:

([('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

我该怎么办?

lambda pyspark rdd
1个回答
0
投票

您不能在lambda函数中指定类似的值。而是返回包含修改值的新对象。

试试这个:

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)))
© www.soinside.com 2019 - 2024. All rights reserved.