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
方法是flatMap
和mapValues
的组合。
让我们从给定的 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())
不会产生任何额外的关键元素对,因为序列是空的。
现在结合 flatMap
和 mapValues
,你得到 flatMapValues
。
我正在阅读 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
方法是flatMap
和mapValues
的组合。
让我们从给定的 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())
不会产生任何额外的关键元素对,因为序列是空的。
现在结合 flatMap
和 mapValues
,你得到 flatMapValues
。