Почему простой UDF выдает неподдерживаемую ошибку? - PullRequest
0 голосов
/ 22 апреля 2019

просто с помощью функции UDF для объединения двух строк. Вот мой код

import  org.apache.spark.sql.functions.udf
val udfconcat =udf[String ,String, String](concat_udf)

spark.sqlContext.udf.register("udf_sel","udfconcat")

spark.sql("select FirstName,LastName, udf_sel(FirstName,LastName) AS CONCATENATEDNAME FROM checks").show()

def concat_udf(fN: String,lN : String) : String ={
    fN + lN
}

Моя схема

   EmployeeID|      int|   null|
|   FirstName|   string|   null|
|    LastName|   string|   null|
|DepartmentID|   bigint|   null|
|      Salary|   double|   null|

Когда я пытаюсь выполнить, я получаю

Схема для типа Char не поддерживается

1 Ответ

0 голосов
/ 22 апреля 2019

Вы передаете String,String при регистрации udf, но для регистрации UDF нам нужно передать аргументы как String, function

  • для этого случая нам нужно передать "udf_sel",concat_udf _

Попробуйте использовать любой из следующих подходов:

def concat_udf(fN: String,lN : String) : String ={
    fN + lN
}

spark.sqlContext.udf.register("udf_sel",concat_udf _)

spark.sql("select FirstName,LastName, udf_sel(FirstName,LastName) AS CONCATENATEDNAME FROM checks").show()
* * Тысяча двадцать-одиной (или) * * одна тысяча двадцать-дв
val cnct=(fn:String,ln:String)=> {fn + ln}

spark.sqlContext.udf.register("udf_sel",cnct)

spark.sql("select FirstName,LastName, udf_sel(FirstName,LastName) AS CONCATENATEDNAME FROM checks").show()

(или)

spark.sqlContext.udf.register("udf_sel",(fn:String,ln:String) => fn+ln)

spark.sql("select FirstName,LastName, udf_sel(FirstName,LastName) AS CONCATENATEDNAME FROM checks").show()
...