我從資料庫加載資料到Spark資料框架,名為DF,然后我必須從資料框架中提取一些記錄,其ID有特殊的條件。所以,我定義了這個函式:
def hash_id(id:String)。Int = {
val two_char = id.takeRight(2).toInt
val hash_result = two_char % 4。
return hash_result
然后,我在這個查詢中使用該函式:
DF.filter(hash_id("ID")==3)
但是我收到了這個錯誤:
value ===不是Int的成員。
DF有ID列。
請指導我如何在where/filter子句中使用自定義函式?
如果有任何幫助,我將非常感激。
uj5u.com熱心網友回復:
===只能在列物件之間使用。這就是為什么你有一個錯誤value ===不是Int的成員,因為你的函式hash_id的回傳型別是一個Int,而不是一個Column
為了能夠使用你的函式,你應該把它轉換成用戶定義的函式,并把這個函式應用于一個列物件,如下所示:
import org.apache.spark.sql.function.{col, udf}。
def hash_id(id:String)。Int = {
val two_char = id.takeRight(2).toInt
val hash_result = two_char % 4。
return hash_result
}
val hash_id_udf = udf((id: String) => hasd_id(id) )
DF.filter(hash_id_udf(col("ID") === 3)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332580.html
標籤:
