Scala UDF函数引发空指针异常
我有以下方法:Scala UDF函数引发空指针异常,scala,apache-spark,Scala,Apache Spark,我有以下方法: class LoadService(configs: Configs, siteDataFrame:DataFrame) extends Serializable{ var serviceConfig =configs.getServiceConfig def insertIntoCassandra(siteMetaData: MetaData, dataFrame: DataFrame): Unit ={ var query = ca
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 query具有getSiteId()。因此它会触发getSiteId UDF函数,但由于某些原因,UDF函数始终存在空指针异常。如果我将serviceConfig.getSiteId.toInt放在insertIntoCassandra函数中,该函数可以访问serviceConfig,但由于某种原因,我使用的所有UDF函数似乎都会抛出null指针异常
serviceConfig定义为类中的变量。
无论何时调用此函数,它都会在serviceConfig.getAdminKeySpace处引发空指针异常。似乎serviceConfig为空。但是,如果我将相同的语句放在类中UDF函数之外的任何其他地方,它似乎都能工作。在这个类被实例化之后,UDF函数也被调用。UDF函数是否无权访问serviceConfig或其他内容?包含此方法的类扩展了Serializable,因此我不确定这是否会产生影响。实际上,问题在于以下语句:
var serviceConfig =configs.getServiceConfig
Configs是另一个具有Configuration java对象的java类,配置不可序列化,因此无法与spark一起使用,因为spark需要可序列化性。您能否告诉我们如何定义变量
serviceConfig
?这似乎是一个范围问题。你能发布更多的代码吗?