为什么我得到nullpointer异常

mwg9r5ms  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(402)

我正试图实现这样的目标

Object Main extends app {
    val sc = new SparkContext(sparkConf) 
    val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
    val data = hiveContext.sql("select * from person").map(mapData(_))
    println(data.collect())
    def mapData(row:Row){
        val data = new Person <- Java object
        data.setName(getStringTrimmedToNull(row.getAs("name")))
        data.setId(getStringTrimmedToNull(row.getAs("id")))
        var salaryQuery = "select * from salary where id = '${id}'"
        val query = salaryQuery. replace("${id}",data.getId)
        hiveContext.sql(query).map(mapSalData(_))
    }

    def mapSalData(row:Row){
        val salData = new Salary <= object for java class salary
        //set data into the object
    }

}

上面是我试图做的伪代码,它在这一行返回空指针错误

hiveContext.sql(query).map(mapSalData(_))

有人知道我做错了什么吗?

zxlwwiss

zxlwwiss1#

对于spark初学者来说,这是一个常见的错误。你不能使用 HiveContext (sqlcontext、sparksession或sparkcontext)在将在执行器中运行的闭包中。
您可以重写sql代码以使用 join 就像 select * from person p join salary s where p.id = s.id .

相关问题