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
方法是的组合flatMap
和mapValues
.
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())
由于序列为空,因此不会生成任何其他键元素对.
现在结合flatMap
和mapValues
,你会得到flatMapValues
.
flatMapValues适用于与key关联的每个值.在上述情况下,x to 5
意味着每个值将递增到5.
在你拥有的第一对(1,2)
,这里的关键是1,值是2所以在应用转换后它将成为{(1,2),(1,3),(1,4),(1,5)}
.
希望这可以帮助.
归档时间: |
|
查看次数: |
11917 次 |
最近记录: |