Создан один проект «spark-udf» и письменный улей udf, как показано ниже:
package com.spark.udf
import org.apache.hadoop.hive.ql.exec.UDF
class UpperCase extends UDF with Serializable {
def evaluate(input: String): String = {
input.toUpperCase
}
Построил и создал банку для него. Пытался использовать этот udf в другой программе spark:
spark.sql("CREATE OR REPLACE FUNCTION uppercase AS 'com.spark.udf.UpperCase' USING JAR '/home/swapnil/spark-udf/target/spark-udf-1.0.jar'")
Но следующая строка дает мне исключение:
spark.sql("select uppercase(Car) as NAME from cars").show
Исключение:
Исключение в потоке "main" org.apache.spark.sql.AnalysisException: Нет
обработчик для UDAF 'com.spark.udf.UpperCase'. использование
вместо этого sparkSession.udf.register (...); линия 1 поз 7 в
org.apache.spark.sql.catalyst.catalog.SessionCatalog.makeFunctionExpression (SessionCatalog.scala: 1105)
в
org.apache.spark.sql.catalyst.catalog.SessionCatalog $$ anonfun $ орг $ апач $ искрой $ SQL $ Катализатор $ каталог $ SessionCatalog $$ makeFunctionBuilder $ 1.Apply (SessionCatalog.scala: 1085)
в
org.apache.spark.sql.catalyst.catalog.SessionCatalog $$ anonfun $ орг $ апач $ искрой $ SQL $ Катализатор $ каталог $ SessionCatalog $$ makeFunctionBuilder $ 1.Apply (SessionCatalog.scala: 1085)
в
org.apache.spark.sql.catalyst.analysis.SimpleFunctionRegistry.lookupFunction (FunctionRegistry.scala: 115)
в
org.apache.spark.sql.catalyst.catalog.SessionCatalog.lookupFunction (SessionCatalog.scala: 1247)
в
org.apache.spark.sql.catalyst.analysis.Analyzer $ ResolveFunctions $$ anonfun $ применяются $ 16 $$ anonfun $ applyOrElse $ 6 $$ anonfun $ applyOrElse $ 52.apply (Analyzer.scala: 1226)
в
org.apache.spark.sql.catalyst.analysis.Analyzer $ ResolveFunctions $$ anonfun $ применяются $ 16 $$ anonfun $ applyOrElse $ 6 $$ anonfun $ applyOrElse $ 52.apply (Analyzer.scala: 1226)
в
org.apache.spark.sql.catalyst.analysis.package $ .withPosition (package.scala: 48)
Любая помощь в этом деле очень ценится.