【问题标题】:Explanation of lambda function inside flatMap function: rdd.flatMap(lambda x: map(lambda e: (x[0], e), x[1]))?flatMap 函数内部 lambda 函数的解释:rdd.flatMap(lambda x: map(lambda e: (x[0], e), x[1]))?
【发布时间】:2019-12-08 02:40:23
【问题描述】:

我的问题与在此链接中找到的问题完全相同:Spark: Expansion of RDD(Key, List) to RDD(Key, Value) 并且答案确实是正确的。

问题是转一个RDD,例如:

(1, List(1, 2, 3))

进入

(1,1)
(1,2)
(1,3)

但是,我真的很想了解 lambda 函数在做什么,这样我就不会只是盲目地复制和粘贴。谁能解释一下这是如何工作的?

【问题讨论】:

  • 只是好奇,大写的 List 是什么意思。当我尝试创建一个对象时,它对我来说是未定义的。
  • 我的意思是这不是真正的代码,它只是用来解释原始海报试图实现的概念。

标签: python apache-spark lambda pyspark


【解决方案1】:

rdd.flatMap(lambda x: map(lambda e: (x[0], e), x[1]))函数中:

 map(lambda e: (x[0], e), x[1])

与以下列表推导相同:

[ (x[0], e) for e in x[1] ]

对于示例数据,它产生一个元组列表 (1, 1)、(1, 2) 和 (1, 3),然后您使用 flatMap 将每个项目转换为它们自己的 RDD 元素。

对于这个特定的问题,使用flatMapValues 会更简单:

rdd.flatMapValues(lambda x:x).collect()
#[(1, 1), (1, 2), (1, 3)]

【讨论】:

  • 感谢您的解释,这更有意义。另外,我不知道 flatMapValues 是一个东西,这是一种更简单的方法!我肯定会切换到在我的实现中使用它。
猜你喜欢
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2021-03-16
  • 2016-01-24
  • 2017-08-09
  • 2021-01-24
  • 2016-01-16
  • 1970-01-01
相关资源
最近更新 更多