2016-07-04 69 views
0

我使用Scala從Spark中的withColumn調用udf時收到錯誤,併發生錯誤。 使用SBT構建時發生此錯誤。使用Scala從Spark withColumn中調用udf時出錯

val hiveRDD = sqlContext.sql("select * from iac_trinity.ctg_us_clickstream") 
hiveRDD.persist() 

val trnEventDf = hiveRDD 
    .withColumn("system_generated_id", getAuthId(hiveRDD("session_user_id"))) 
    .withColumn("application_assigned_event_id", hiveRDD("event_event_id")) 


val getAuthId = udf((session_user_id:String) => { 
    if (session_user_id != None){ 
     if (session_user_id != "NULL"){ 
      if (session_user_id != "null"){ 
      session_user_id 
      }else "-1" 
     }else "-1" 
    }else "-1" 
    } 

我收到這是錯誤 -

scala:58: No TypeTag available for String 
val getAuthId = udf((session_user_id:String) => { 

編譯正確的,而不是(session_user_id時:字符串)我使用(session_user_id:任何),但在運行時失敗,因爲任何在Spark中不被識別。 請讓我知道如何處理這個。

+0

錯誤與否沒有意義。 「String」類的對象不能是「None」! – zero323

回答

1

你有沒有嘗試過明確你的類型?

udf[String, String]((session_user_id:String)... 
+0

是的,我試圖明確 - val getAuthId = udf [String,String]((session_user_id:String)=> if(session_user_id == None).... 錯誤是相同的 - scala:57 :No TypeTag available for String [error] val getAuthId = udf [String,String]((session_user_id:String)=> if(session_user_id == None)「 - 1」 –

+1

@preitamojha您確定您正在執行相同的代碼你是否給我們?這似乎不太可能,我不能重現錯誤。 – eliasah

相關問題