Spark:FlatMapValues查询

Vin*_*nay 10 flatmap apache-spark

我正在阅读学习Spark书,无法理解以下对rdd转换.

rdd.flatMapValues(x => (x to 5))
Run Code Online (Sandbox Code Playgroud)

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

有人可以解释一下.

jti*_*usj 30

让我们从给定的rdd开始.

val sampleRDD = sc.parallelize(Array((1,2),(3,4),(3,6)))
Run Code Online (Sandbox Code Playgroud)

现在,flatMapValues方法是的组合flatMapmapValues.

mapValues它在保持键的同时映射值是什么.例,

如果你这样做sampleRDD.mapValues(x => x to 5),它会给你

Array((1,Range(2, 3, 4, 5)), (3,Range(4, 5)), (3,Range()))
Run Code Online (Sandbox Code Playgroud)

注意这里说的键值对(3, 6),它产生(3,Range())6 to 5

什么flatMap是"分解"集合到集合的元素.您可以在这里这里搜索更准确的flatMap在线描述.

例如,

给定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)).
Run Code Online (Sandbox Code Playgroud)

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

另请注意,(3, Range())由于序列为空,因此不会生成任何其他键元素对.

现在结合flatMapmapValues,你会得到flatMapValues.

  • 很好的解释。很有帮助。 (2认同)

Sha*_*shi 5

flatMapValues适用于与key关联的每个值.在上述情况下,x to 5意味着每个值将递增到5.

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

希望这可以帮助.