2017-03-07 5 views
0

Ich versuche, so etwas wie diesesWarum erhalte ich Nullpointer Exception

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 
    } 

} 

Above zu implementieren wird der Pseudo-Code von dem, was ich versuche, an dieser Linie zu tun und es Null-Pointer-Fehler zurückgibt

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

Würde jemand eine Idee haben, was mache ich falsch?

+2

Können Sie auf Englisch beschreiben, was Sie tun möchten? – Aaron

Antwort

0

Dies ist ein häufiger Fehler für Spark Anfänger. Sie können HiveContext (SQLContext, SparkSession oder SparkContext) nicht in einem Abschluss verwenden, der in Executoren ausgeführt wird.

Sie können Ihre SQL-Codes neu schreiben, um join wie select * from person p join salary s where p.id = s.id zu verwenden.

Verwandte Themen