取消
顯示的結果
而不是尋找
你的意思是:

如何使用Java MaskFormatter sparksql嗎?

Databrickguy
新的貢獻者二世

我創建了一個基於Java函數MaskFormatter磚/ Scala的函數。

但是當我從sparksql調用它,我收到錯誤消息

錯誤的SQL語句:AnalysisException:未定義的功能:formatAccount。這個函數既不是內置/臨時函數,也不是一個持久性函數spark_catalog.default.formataccount資格。1號線pos 32

這是我的函數

進口javax.swing.text。MaskFormatter def formatAccount(賬戶:字符串,麵具:String):字符串= {val格式化程序=新MaskFormatter(麵具。替換(“X”,“A”)) formatter.setValueContainsLiteralCharacters(假)val formatAccount = formatter.valueToString(賬戶)formatAccount}

這是查詢代碼,收到錯誤消息

sql(" " "選擇java_method (emitToKafka formatAccount (“1222233334”、“X-XXXX-XXXX-X”)) " " ")

但是如果我運行下麵的代碼,它將正常工作。

formatAccount (“1222233334”、“X-XXXX-XXXX-X”)
res0:字符串= 1-2222-3333-4

可能錯過了什麼?

1回複1

匿名
不適用

@Tim張:

問題是formatAccount函數被定義為一個Scala函數,但SparkSQL正在尋找一個SQL函數。你需要注冊Scala函數作為一個SQL函數,這樣就可以從SparkSQL調用。你可以注冊使用spark.udf Scala函數作為SQL函數。注冊方法。下麵是一個示例代碼片段:

進口org.apache.spark.sql.functions。udf val formatAccountUDF = udf((賬戶:字符串,麵具:字符串)= > {val格式化程序= new MaskFormatter(麵具。替換(“X”,“A”)) formatter.setValueContainsLiteralCharacters(假)val formatAccount = formatter.valueToString formatAccount}) spark.udf(帳戶)。注冊(“formatAccount formatAccountUDF)

注冊功能後,您可以使用它在你SparkSQL查詢:

sql(" " "選擇formatAccount (“1222233334”、“X-XXXX-XXXX-X”) " " ")

希望這應該工作。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map