scala学习(1)----map和flatMap的区别

转载:https://www.cnblogs.com/wbh1000/p/9846401.html

两者的区别主要在于action后得到的值

例子:

复制代码
import org.apache.spark.{SparkConf, SparkContext}

object MapAndFlatMap {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext(new SparkConf().setAppName("map_flatMap_demo").setMaster("local")) val arrayRDD =sc.parallelize(Array("a_b","c_d","e_f")) arrayRDD.foreach(println) //打印结果1  arrayRDD.map(string=>{ string.split("_") }).foreach(x=>{ println(x.mkString(",")) //打印结果2  }) arrayRDD.flatMap(string=>{ string.split("_") }).foreach(x=>{ println(x.mkString(","))//打印结果3  }) } }
复制代码

上述代码中,打印结果1、2、3分别如下面三图

 

打印结果1

 

打印结果2

 

打印结果3

转载于:https://www.cnblogs.com/Lee-yl/p/11023990.html

Shapley-Value是一种用于解决合作博弈中成员收益分配问题的方法。在Scala中,可以通过以下步骤来实现Shapley-Value的计算: 1. 定义一个表示玩家的类,包括以下属性:名称、对其他玩家的贡献函数、玩家的价值。 2. 定义一个表示游戏的类,包括以下属性:玩家列表、游戏收益函数。 3. 实现Shapley-Value的计算方法,该方法接受一个游戏对象和一个玩家名称作为参数。该方法通过对每个玩家进行排列组合,计算每个玩家在不同的联合决策中的贡献,并将其加权平均,得出该玩家的Shapley-Value。 下面是一个简单的Scala实现: ```scala case class Player(name: String, contribution: List[Int], value: Int) class Game(val players: List[Player], val payoffFunction: List[Int] => Int) { def shapleyValue(playerName: String): Double = { val player = players.find(_.name == playerName).get val n = players.length val permutations = (1 to n-1).flatMap(i => (0 to n-2).combinations(i)) val contributions = permutations.map { indices => val subset = players.filter(p => indices.contains(players.indexOf(p))) val subsetPayoffFunction = (list: List[Int]) => payoffFunction(indices.map(list(_))) subsetPayoffFunction(indices.map(player.contribution(_))).toDouble } contributions.sum / factorial(n) } private def factorial(n: Int): Int = if (n == 1 || n == 0) 1 else n * factorial(n-1) } ``` 在这个实现中,我们首先定义了一个Player类,其中包含玩家的名称、对其他玩家的贡献函数和玩家的价值。然后,我们定义了一个Game类,其中包含玩家列表和游戏收益函数。最后,我们实现了Shapley-Value的计算方法shapleyValue,该方法接受一个玩家名称作为参数,并返回该玩家的Shapley-Value。 在shapleyValue方法中,我们首先找到了要计算Shapley-Value的玩家。然后,我们使用排列组合的方法计算每个玩家在不同联合决策中的贡献,并将其加权平均得到该玩家的Shapley-Value。我们还实现了一个私有方法factorial,该方法计算阶乘,用于计算排列组合数。 注意:以上代码仅为示例,具体实现可能需要根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值