Spark DataFrame中基于List的排序UDF


DataFrame中支持的类型如 Struct此类型我们是用对象进行的封装,但是要对strcut里的数据进行排序,个人想到的办法还是把struct转位Json,然后反解析Json

sqlcontext.udf.register("stuSort", (stuList: Seq[String]) => {
  val rs = Option(conponList) match {
    case None => ""
    case Some(c) => {
      val couponInfoList = ArrayBuffer[CouponInfo]()
      conponList.foreach(x => {
        couponInfoList.append(readAsBeanByJson4s[CouponInfo](x))
      })
    //基于Ordering的隐式参数
      implicit object CouponOrdering extends Ordering[CouponInfo] {
        override def compare(s1: CouponInfo, s2: CouponInfo): Int = {
          if (s1.coupon_bank == s2.coupon_bank) if (s1.coupon_list == s2.coupon_list) s1.coupon_st.compareTo(s2.coupon_st)
          else s1.coupon_list.compareTo(s2.coupon_list)
          else s1.coupon_bank.compareTo(s2.coupon_bank)
        }
      }
      couponInfoList.sorted.mkString(",")
    }
  }
  rs.toString
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值