scala - 为什么我会收到Nullpointer异常

标签 scala hadoop apache-spark

我正在尝试实现这样的事情

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(_))

有人会对我做错什么有任何想法吗?

最佳答案

这是Spark初学者的常见错误。您不能在将在执行程序中运行的闭包中使用HiveContext(SQLContext,SparkSession或SparkContext)。

您可以重写SQL代码以使用join之类的select * from person p join salary s where p.id = s.id

关于scala - 为什么我会收到Nullpointer异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657532/

相关文章:

java - 实现线程安全共享计数器的功能方法

mysql - 在查询另一个表时将数据导出到配置单元表

hadoop - 将 XML 数据加载到 hive 表时出错

java - Spark - 将RDD保存到多个文件作为输出

python - PySpark异常: Java gateway process exited before sending its port number

scala - 使用本地时增加Spark内存[*]

java - 如何测试 Java 对象是否是 scala 中的枚举?

scala - 对猫效应 Async.memoize 感到困惑

web-services - 我如何使用 Play Framework 的 FakeApplication 来通过 play 的 WS 对象停止对 Web 服务的调用?

hadoop - 从Spark将JavaRDD保存到HDFS