mapValues和flatMapValues的用法

val a = sc.parallelize(Array((5,2),(6,3)))
val b = a.flatMapValues(x=>1 to x)
b.collect.foreach(println)

结果为:

(5,1)
(5,2)
(6,1)
(6,2)
(6,3)
val rdd1 = rdd3.mapValues(x=>x+"||")
rdd1.collect().foreach(println)

得到的结果为:

(1,a||)
(1,d||)
(2,b||)
(3,c||)

暂且对flatMapValue用法的认识为下面这个例子:

("w"(("a",1),("b",2))).flatMapValues(x=>x)

"w"为key值,后面的为value值,对value值进行flatMap操作,得到的结果是:

("w"(("a",1)))
("w"(("b",2)))

在这里看来就像是使用了乘法分配律一样,

### 关于 `mapValues` 的用法Scala 中,`mapValues` 是一种专门用于操作 `Map` 类型的方法。它允许开发者通过提供一个函数来转换 `Map` 中所有的 **value 值**,而不改变其对应的键(key)。需要注意的是,`mapValues` 方法仅适用于 `Map` 而不是 `List`。 以下是关于如何在 Scala 中使用 `mapValues` 的详细说明: #### 使用场景 假设有一个 `Map` 数据结构如下所示: ```scala val map = Map("a" -> 1, "b" -> 2, "c" -> 3) ``` 如果希望将每个值乘以 2,则可以使用 `mapValues` 来实现这一需求[^1]。 #### 实现方式 下面是一个具体的例子展示如何应用 `mapValues`: ```scala val transformedMap = map.mapValues(value => value * 2) // 结果为:transformedMap: Map(String, Int) = Map("a" -> 2, "b" -> 4, "c" -> 6) ``` 上述代码片段中,`mapValues` 接收了一个匿名函数 `(value => value * 2)`,该函数被应用于原始 `Map` 中的每一个值,从而生成一个新的映射关系。 #### 注意事项 尽管 `mapValues` 提供了一种简洁的方式来处理 `Map` 的值部分,但它返回的结果实际上是一个视图(view),这意味着只有当访问某个特定条目时才会执行相应的计算逻辑[^2]。 如果需要立即获得完整的更新后的 `Map` 对象,可以通过调用 `.toMap` 将其显式转换成不可变的 `Map` 形式。 对于列表 (`List`) 类型的数据集合来说,并不存在直接等价于 `mapValues` 的方法;但是可以用普通的 `map` 函数配合模式匹配或者提取器来达到相似的效果[^3]。 例如给定一个包含元组的列表: ```scala val listOfTuples = List(("apple", 5), ("banana", 7)) ``` 要将其第二个元素加倍,可以这样做: ```scala val newList = listOfTuples.map { case (k, v) => (k, v * 2) } // 新列表变为:List(("apple", 10), ("banana", 14)) ``` 这种做法虽然不如针对 Maps 执行 mapValues 那样直观明了,但在 Lists 上实现了类似的变换功能。 ### 总结 - `mapValues` 主要是用来修改 `Map` 内部存储的 values。 - 它不会影响 keys 并且会延迟求值直到实际查询发生为止。 - 若要对其他数据结构比如 lists 进行类似的操作则需采用通用形式如标准库里的 `map`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值