簡體   English   中英

Spark/Scala - 無法執行用戶定義的 function

[英]Spark/Scala - Failed to execute user defined function

我有以下有效的代碼。

val locList = Source.fromInputStream(getClass.getResourceAsStream("/locations.txt")).getLines().toList

def locCheck(col: String): Boolean = locList.contains(col)
def locUDF = udf[Boolean, String](locCheck)

但是當我添加一個toUpperCase來制作它時

val locList = Source.fromInputStream(getClass.getResourceAsStream("/locations.txt")).getLines().toList

def locCheck(col: String): Boolean = locList.contains(col.toUpperCase)
def locUDF = udf[Boolean, String](locCheck)

我遇到了由Failed to execute user defined functionjava.lang.NullPointerException

我使用 udf 作為df.filter(locUDF('location)).count()

我在這里做錯了什么,我該如何解決?

udf或 udf 沒有任何問題。 問題在於進入udf的數據。

在您的情況下,如果列location具有null值,則當您將這些值傳遞給null時, col的值為udf

然后,如果 col 是 null,則在調用col.toUpperCase時會收到NullPointerException

您可以簡單地檢查 function 中的 null 值

def locCheck(col: String): Boolean = if (col == null) false else locList.contains(col.toUpperCase)

或者您可以使用 Options 來處理它

def locCheck(col: String): Boolean =locList.contains(Option(col).map(_.toUpperCase))

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM