Как решить перегруженный регистр значений метода с альтернативами, UDF Spark scala - PullRequest
0 голосов
/ 28 июня 2018

я пытаюсь получить последний токен полного пути к файлу, и мой код выглядит как

val testUdf = spark.udf.register("get_filename", (fullpath: String) => {
  val lastIndex = fullpath.lastIndexOf("/")
  fullpath.substring(lastIndex, fullpath.length - 1)}, DataTypes.StringType)

и я получаю ошибку:

Error:(39, 29) overloaded method value register with alternatives:
  (name: String,f: org.apache.spark.sql.api.java.UDF22[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _],returnType: org.apache.spark.sql.types.DataType)Unit <and> ......

Кто-нибудь знает, как решить эту проблему?

Спасибо

1 Ответ

0 голосов
/ 28 июня 2018

Не существует варианта метода register, который принимает закрытие Scala и DataType (существуют такие варианты org.apache.spark.sql.functions.udf, предназначенные для взаимодействия Java).

Если вы используете замыкания с регистром, функция должна возвращать объект, который может быть отображен на типы SQL путем отражения. В вашем случае это удовлетворяет, поэтому просто опустите тип данных:

val testUdf = spark.udf.register("get_filename", (fullpath: String) => {
 val lastIndex = fullpath.lastIndexOf("/")
 fullpath.substring(lastIndex, fullpath.length - 1)}
)
...