scala用户定义函数在sparksql中不起作用

时间:2017-08-12 13:22:47

标签: scala apache-spark apache-spark-sql user-defined-functions

我编写了一个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)

有人可以帮助我解决问题吗?

0 个答案:

没有答案