ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spark 之 UDF的两种方式

2020-12-27 21:35:56  阅读:613  来源: 互联网

标签:两种 min max age UDF members timezone spark


详见:https://www.cnblogs.com/itboys/p/9347403.html

1)如果使用spark.sql("") 

=> 内部调用hive处理,只能使用spark.udf.register("",)

例如:

import org.apache.spark.sql.functions._
val maxandmin = udf{
  (cdata:Double,maxdata:Double,mindata:Double)=>{
    (cdata-mindata)/(maxdata-mindata)
  }
}
spark.udf.register("maxandmin",maxandmin)

def getUserbaseinfo(spark:SparkSession)={
  val sql = s"""select
              |userid,locale,gender,
              |location,
              |maxandmin(cage,max_age,min_age) age,
              |maxandmin(timezone,max_timezone,min_timezone) timezone,
              |maxandmin(members,max_members,min_members) members
              |from
              |(select  userid,
              |case when l.locale is null then 0 else l.localeid end locale,
              |gender,location,
              |calcage(birthyear) cage,min_age,max_age,
              |timezone,min_timezone,max_timezone,
              |members,min_members,max_members
              |from dwd_events.dwd_users u
              |left join dwd_events.dwd_locale l
              |on lower(u.locale)=lower(l.locale)
              |cross join (select min(calcage(birthyear)) min_age
              |,max(calcage(birthyear)) max_age,min(timezone) min_timezone,
              |max(timezone) max_timezone, min(members) min_members,max(members) max_members
              |from dwd_events.dwd_users) b ) c""".stripMargin
  spark.sql(sql)
}

2)如果使用DataFrame API

=> 仅使用udf()就行

 

标签:两种,min,max,age,UDF,members,timezone,spark
来源: https://www.cnblogs.com/sabertobih/p/14198800.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有