Spark自定义函数(1)

记录:Spark有个需求需要把某个ip字段进行点分十进制的转换,使用自定义函数实现,在此处记录实现过程

点分十进制转换函数

此时的函数仅是scala代码,无法再DataFrame中使用

Spark自定义函数的点分十进制转换

上述的udf为 import org.apache.spark.sql.functions.udf

自定义函数初始化
自定义函数使用,dim_sqm_iprange_group为DataFrame

关键代码

/**

* 将点分ip转换成十进制

  * @param ip

  * @return

  */

def ipToLong(ip:String) = {

val arr: Array[String] = ip.split("\\.")

var result:Long =0

  var ipl:Long =0

  for (i <-0 to3) {

ipl = arr(i).toLong

result |= ipl << ((3 - i) <<3)

}

result

}



/**

* 自定义函数 将点分ip转换成Long类型的数据

*

  * @return 返回值是一个自定义函数

*/

def getIpToLong(): UserDefinedFunction = {

val ipToLong: UserDefinedFunction =udf((ip:String) => {

val arr: Array[String] = ip.split("\\.")

var result:Long =0

    var ipl:Long =0

    for (i <-0 to3) {

ipl = arr(i).toLong

result |= ipl << ((3 - i) <<3)

}

result

})

ipToLong

}



var ipToLong: UserDefinedFunction =null //自定义函数
ipToLong =getIpToLong//初始化自定义函数

//自定义函数使用示例 其中dim_sqm_iprange_group为DataFrame

dim_sqm_iprange_group.select(

ipToLong($"ip_start").as("ip_start"),

  ipToLong($"ip_end").as("ip_end"),

  $"group_type"

)

------------------------------------------------------------------------------------------------------

此为个人学习笔记

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python3 函数  函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性...
    做笔记的喵Cc阅读 463评论 0 2
  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 3,479评论 1 24
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,495评论 0 13
  • 元日 宋 · 王安石 爆竹声中一岁除 春风送暖入屠苏 千门万户曈曈日 总把新桃换旧符 竹爆惊春又一岁 千门万户迎新春
    冯恒友阅读 167评论 0 0
  • 最近的电视剧集我的前半生快结局了,在所有人都谈论这部剧情时,我忍不住自己的好奇心还没看完小说,就专心致志追剧了。 ...
    尤斯草阅读 271评论 3 5