【发布时间】:2025-12-11 17:50:01
【问题描述】:
我是 Scala 的初学者,想了解 Spark Scala 中的 UDF。 我将使用以下示例演示我的问题。我正在使用数据砖使用 Spark Scala。
假设我有以下数据框,
val someDF = Seq(
(1, "bat"),
(4, "mouse"),
(3, "horse")
).toDF("number", "word")
someDF.show()
+------+-----+
|number| word|
+------+-----+
| 1| bat|
| 4|mouse|
| 3|horse|
+------+-----+
我需要通过对数字列进行一些操作来创建一个函数来计算一个新列。
例如,我创建了这个函数来计算 25/(number+1),如下所示,它起作用了。
import org.apache.spark.sql.functions.{col, udf}
import org.apache.spark.sql.functions._
val caldf = udf { (df: Double) => (25/(df+1)) }
someDF.select($"number", $"word", caldf(col("number")) as "newc").show()
+------+-----+----+
|number| word|newc|
+------+-----+----+
| 1| bat|12.5|
| 4|mouse| 5.0|
| 3|horse|6.25|
+------+-----+----+
但是当我用日志操作符尝试这个时,它不起作用
import org.apache.spark.sql.functions.{col, udf}
import org.apache.spark.sql.functions._
val caldf = udf { (df: Double) => log(25/(df+1)) }
command-3140852555505238:3: error: overloaded method value log with alternatives:
(columnName: String)org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column)org.apache.spark.sql.Column
cannot be applied to (Double)
val caldf = udf { (df: Double) => log(25/(df+1)) }
^
谁能帮我弄清楚可能是什么原因?谢谢。
【问题讨论】:
标签: scala apache-spark