Partial Function

Partial Function指的是对输入数据中的某一类型数据起作用的函数。它的声明如下:

traitPartialFunction[-A+B] extends (A) ⇒ B

是函数的子trait

使用如下,例如:

val toZero : PartialFunction[Int,Int] = {
     | case one if (one < 0)  => 0
     | }
     
scala> toZero.isDefinedAt(1)
res14: Boolean = false

scala> toZero(-1)
res15: Int = 0


神奇的case:

  val actionRank = formatedRDD //生成了(imac,ip,version,data,data) 的tuple,可能有()或者其他
                    .map {
                      case (imac, ip, version, date, data) => ((imac, version),Try(data.split("#").last.split(":")(1).toLong).getOrElse(0l))
                    }

这个例子可以看出,在实际使用中,传给一个函数的可能有多种类型的数据,使用case可以处理你想要处理的那种类型数据,而这正是Partial Function的优势。

使用Scala编写spark程序中,使用case可以让tuple,map等程序中变量更易读。

val dollar = Map("China" -> "CNY", "US" -> "DOL")
//perfer
dollar.foreach {
     case (country, currency) => println(s"$country -> $currency")
     }
 //avoid
 dollar.foreach ( x => println(s"$x._1 -> $x._2") )

大量使用_.1,_.2等形式,过几天自己写的数据结构也难以读懂。


另外,partially applied function 指的是:函数参数已经有了默认值。

例如:

def add(i: Int, j: Int) = i + j
val add5 = add(_: Int,5)


转载于:https://my.oschina.net/yulinguo/blog/405445

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值