Я новичок в Scala и хотел узнать о UDF в Spark Scala. Я собираюсь использовать следующий пример, чтобы продемонстрировать мою проблему. Я использую Spark Scala, используя Data Bricks.
Допустим, у меня есть следующий фрейм данных,
val someDF = Seq(
(1, "bat"),
(4, "mouse"),
(3, "horse")
).toDF("number", "word")
someDF.show()
+------+-----+
|number| word|
+------+-----+
| 1| bat|
| 4|mouse|
| 3|horse|
+------+-----+
Мне нужно создать функцию для вычисления нового столбца, выполнив некоторые операции со столбцом числа.
Для примера я создал эту функцию для вычисления 25 / (число + 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)) }
^
Может кто-нибудь помочь мне разобраться в чем может быть причина? Спасибо.