首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UDF函数抛出空指针异常

UDF函数抛出空指针异常
EN

Stack Overflow用户
提问于 2017-03-10 09:30:25
回答 1查看 453关注 0票数 0

我有以下方法:

代码语言:javascript
复制
 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自定义函数,但由于某些原因,自定义函数总是有空指针异常。如果我将serviceConfig.getSiteId.toInt放在insertIntoCassandra函数中,该函数可以访问serviceConfig,但由于某些原因,我所使用所有UDF函数似乎都抛出了空指针异常

serviceConfig被定义为类中的一个变量。每当调用此函数时,它都会在serviceConfig.getAdminKeySpace处抛出空指针异常。serviceConfig似乎为空。但是,如果我把同样的语句放在UDF函数之外,放在类中的任何其他地方,它似乎都可以工作。并且UDF函数也是在这个类被实例化之后调用的。是不是自定义函数不能访问serviceConfig或其他什么?包含此方法的类扩展了Serializable,所以我不确定这是否会有所不同。

EN

回答 1

Stack Overflow用户

发布于 2017-03-11 04:24:20

实际上,问题就是这句话:

代码语言:javascript
复制
var serviceConfig =configs.getServiceConfig

Configs是另一个具有配置java对象的java类,而Configuration是不可序列化的,因此它不能与spark一起工作,因为spark需要可序列化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42708570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档