我有以下方法:UDF函数抛出空指针异常
class LoadService(configs: Configs, siteDataFrame:DataFrame) extends Serializable{
var serviceConfig =configs.getServiceConfig
def insertIntoCassandra(siteMetaData: MetaData, dataFrame: DataFrame): Unit ={
var query = cassandraUtil.buildInsertQuery(activeReplicaKeySpace, tableName, columns, sparkTempTable)
cassandraSQLContext.sql(query)
logger.info("Query executed")
}
def getSiteId: Int = {
System.out.println("test: " + serviceConfig.getAdminKeyspace)
return serviceConfig.getSiteId.toInt
}
cassandraSQLContext.udf.register("getSiteId", getSiteId _)
}
所以另一个类调用insertIntoCassandra然后VAR查询有getSiteId()。因此它会触发getSiteId UDF函数,但由于某些原因,UDF函数始终具有空指针异常。如果我将serviceConfig.getSiteId.toInt放入insertIntoCassandra函数中,该函数可以访问serviceConfig,但由于某种原因,我似乎已经抛出了所有UDF函数抛出空指针异常
serviceConfig被定义为类中的变量。 无论何时调用此函数,它都会在serviceConfig.getAdminKeySpace中引发空指针异常。看起来像serviceConfig是空的。但是,如果我在类中任何地方的UDF函数之外放置相同的语句,它似乎可行。在这个类被实例化之后,UDF函数被调用。 UDF函数是否无法访问serviceConfig或什么?包含这个方法的类扩展Serializable,所以我不知道这是否会有所作为。
你能告诉你如何定义变量'serviceConfig'吗? – himanshuIIITian
它看起来像一个范围问题。你能发布更多的代码吗? –