Spark udf,udaf

udf

def filterTdWithOp(operator: String): Boolean = {
    val x = ".*中国联通.*"
    val y = ".*CHN-UNICOM.*"
    val z = ".*China Unicom.*"
    if (operator!=null && operator.matches(x + "|" + y + "|" + z))
      true
    else
      false
  }
sqlContext.udf.register("filterTdWithOp", filterTdWithOp _)
td.registerTempTable("td")
val tdOp = sqlContext.sql("select *,filterTdWithOp(operator) as fiOp from td").filter("fiOp = true")

udaf

去看官网比较好

object  MaxPoint extends Aggregator[Input,Input, Input] {
override def zero: Input = Input(0,0,0,"")
  // Combine two values to produce a new value. For performance, the function may modify `buffer`
  // and return it instead of constructing a new object
  override def reduce(b: Input, a: Input): Input = {
    if(b.pointNum>a.pointNum)
      b
    else
      a
  }
  // Merge two intermediate values
  override def merge(b: Input, a: Input): Input = {
    if(b.pointNum>a.pointNum)
      b
    else
      a
  }

  override def finish(reduction: Input): Input = reduction
}

spark2.0之后引入了两个新方法

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值