我编写了一个UDF,它基本上计算给定的IP地址是否在cidr列表中。我能够从scala调用我的UDF,它工作正常,但当我从spark sql调用udf时,它抛出了这个错误。请帮帮我。
getActivity().getApplicationContext()
tag_ip是cidr ip范围的列表。这里isinlist功能正常。但是当我从spark sql调用isinlist函数时,它会在下面显示错误。
%spark
def isinlist = (ip:String) => {
import org.apache.commons.net.util.SubnetUtils
def checkipinrange = (cidr:String,ip:String) => {
val utils = new SubnetUtils(cidr);
val isInRange = utils.getInfo().isInRange(ip);
if (isInRange) {
true
} else {
false
}
}
sqlContext.udf.register("checkipinrange",checkipinrange)
val query=s"""select *
from tag_ip
where checkipinrange(tag_ip.cidr, '$ip') """
val validrange = sqlContext.sql(query)
if(validrange.count > 0) {
true
} else {
false
}
}
isinlist("5.9.29.73")
sqlContext.udf.register("isinlist",isinlist)
有人可以帮助我解决问题吗?