我是scala的初學者。我嘗試scala REPL
了intellij
. 我有一個樣本 df 并試圖測驗udf function
不是builtin
為了理解。
東風:
scala> import org.apache.spark.sql.SparkSession
val spark: SparkSession = SparkSession.builder.appName("elephant").config("spark.master", "local[*]").getOrCreate()
val df = spark.createDataFrame(Seq(("A",1),("B",2),("C",3))).toDF("Letter", "Number")
df.show()
輸出:
|Letter|Number|
------ ------
| A| 1|
| B| 2|
| C| 3|
------ ------
udf 用于資料框過濾器:
scala> def kill_4(n: String) : Boolean = {
| if (n =="A"){ true} else {false}} // please validate if its correct ???
我試過了
df.withColumn("new_col", kill_4(col("Letter"))).show() // please tell correct way???
錯誤
error: type mismatch
第二:我嘗試了直接過濾器:
df.filter(kill_4(col("Letter"))).show()
所需的輸出
------ ------
|Letter|Number|
------ ------
| B| 2|
| C| 3|
------ ------ -
uj5u.com熱心網友回復:
您可以注冊 udf 并在代碼中使用它,如下所示:
import org.apache.spark.sql.functions.col
def kill_4(n: String) : Boolean = {
if (n =="A"){ true } else {false}
}
val kill_udf = udf((x: String) => kill_4(x))
df.select(col("Letter"),col("Number")
kill_udf(col("Letter")).as("Kill_4") ).show(false)
uj5u.com熱心網友回復:
請查看有關 scala 用戶定義功能的資料塊檔案。
您不需要 spark 會話來創建資料框。我洗掉了該代碼。
你的函式有幾個錯誤。由于它非常小,我創建了一個行內的。udf() 呼叫允許該函式與資料幀一起使用。注冊呼叫允許它與 Spark SQL 一起使用。
一個快速的 SQL 陳述句顯示該函式有效。
最后但同樣重要的是,我們需要 udf() 和 col() 函式才能使最后一條陳述句起作用。
總之,這三個片段解決了你的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/508569.html