注册UDF时出现Spark错误:不支持AnyRef类型的Schema

时间:2016-01-26 13:43:30

标签: apache-spark apache-spark-sql

我尝试将UDF注册到sqlContext(在本地模式下运行spark)

这是定义:

const result = _.shuffle('my_string');

这应该是一个函数的简单注册。 获得以下例外:

scala> def getStr=udf((s:String) => {val lastS=s.substring(s.lastIndexOf('/')+1); lastS})
getStr: org.apache.spark.sql.UserDefinedFunction

scala> sqlContext.udf.register("getStr", getStr _)

......等等。 有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

我错过了导入org.apache.spark.sql.functions._。它现在已经解决了。

答案 1 :(得分:0)

UDFRegistration.register只有两个主要变体可用于标准(非聚合)UDF:

  • 使用Scala闭包(Function[i]),其中i从0到22
  • 采用UDF[i]设计用于Java互操作性的i,其中getStr从1到22

UserDefinedFunctionregister,因此它们都不匹配。为了能够正确地sqlContext.udf.register("getStr", (s:String) => ...) 包裹函数,您应该直接传递它:

{{1}}