我有以下方法: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
它看起來像一個範圍問題。你能發佈更多的代碼嗎? –