Spark:FlatMapValues 查询

Spark: FlatMapValues query

我正在阅读 Learning Spark 这本书,无法理解以下 pair rdd 转换。

rdd.flatMapValues(x => (x to 5))

它应用于一个rdd {(1,2),(3,4),(3,6)},转换的输出是{(1,2),(1,3),(1,4),(1,5),(3,4),(3,5)}

谁能解释一下。

flatMapValues 适用于与键关联的每个值。在上面的例子中 x to 5 意味着每个值将增加到 5.

在你有 (1,2) 的地方取第一对,这里的键是 1,值是 2 所以在应用转换后它将变成 {(1,2),(1,3),(1,4),(1,5)}.

希望对您有所帮助。

flatMapValues方法是flatMapmapValues的组合。

让我们从给定的 rdd 开始。

val sampleRDD = sc.parallelize(Array((1,2),(3,4),(3,6)))

mapValues 在保留键的同时映射值。

例如,sampleRDD.mapValues(x => x to 5) returns

Array((1,Range(2, 3, 4, 5)), (3,Range(4, 5)), (3,Range()))

请注意,对于键值对 (3, 6),它会生成 (3,Range()),因为 6 to 5 会生成一个空值集合。


flatMap "breaks down" collections 转化为集合的元素。您可以在线搜索更准确的 flatMap 描述,例如 here and here.

例如,

给定 val rdd2 = sampleRDD.mapValues(x => x to 5), 如果我们这样做 rdd2.flatMap(x => x),您将得到

Array((1,2),(1,3),(1,4),(1,5),(3,4),(3,5)).

也就是说,对于每个键中集合中的每个元素,我们创建一个 (key, element) 对。

还要注意 (3, Range()) 不会产生任何额外的关键元素对,因为序列是空的。

现在结合 flatMapmapValues,你得到 flatMapValues