跨单独的 RDD 对象应用 lambda 函数

Posted

技术标签:

【中文标题】跨单独的 RDD 对象应用 lambda 函数【英文标题】:Applying lambda functions across separate RDD objects 【发布时间】:2019-02-23 02:49:23 【问题描述】:

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

我该怎么办?

【问题讨论】:

【参考方案1】:

您不能在 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)))

【讨论】:

以上是关于跨单独的 RDD 对象应用 lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章

跨 AWS Lambda 函数调用共享数据库连接

如何在已应用于 Spark RDD 的函数中打印语句?

Lightsail 与 Lambda + S3

函数式编程---匿名函数(lambda)

RDD操作

spark2.x由浅入深深到底系列六之RDD 支持java8 lambda表达式