首页 > 解决方案 > flatMap 函数内部 lambda 函数的解释:rdd.flatMap(lambda x: map(lambda e: (x[0], e), x[1]))?

问题描述

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

问题是转一个 RDD,例如:

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

进入

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

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

标签: pythonapache-sparklambdapyspark

解决方案


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)]

推荐阅读