Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 注册UDF时发生Spark错误:不支持AnyRef类型的架构_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 注册UDF时发生Spark错误:不支持AnyRef类型的架构

Apache spark 注册UDF时发生Spark错误:不支持AnyRef类型的架构,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我正试图像这样向sqlContext注册一个UDF(在本地模式下运行spark) 这就是定义: 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) 这应该是一个函数的简单注册。 获取以下异

我正试图像这样向sqlContext注册一个UDF(在本地模式下运行spark)

这就是定义:

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)
这应该是一个函数的简单注册。 获取以下异常:

java.lang.UnsupportedOperationException: Schema for type AnyRef is not supported
        at org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:718)
        at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:30)
        at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$1.apply(ScalaReflection.scala:693)
        at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$1.apply(ScalaReflection.scala:691)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.immutable.List.foreach(List.scala:318)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
        at scala.collection.AbstractTraversable.map(Traversable.scala:105)
        at org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:691)
        at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:30)
        at org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:630)
        at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:30)
        at org.apache.spark.sql.UDFRegistration.register(UDFRegistration.scala:119)
        at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:32)
        at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:37)
        at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:39)
        at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:41)
        at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:43)
        at $iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:45)
        at $iwC$$iwC$$iwC$$iwC.<init>(<console>:47)
        at $iwC$$iwC$$iwC.<init>(<console>:49)
        at $iwC$$iwC.<init>(<console>:51)
java.lang.UnsupportedOperationException:不支持AnyRef类型的架构
位于org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:718)
位于org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:30)
位于org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$1.apply(ScalaReflection.scala:693)
位于org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$1.apply(ScalaReflection.scala:691)
位于scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
位于scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
位于scala.collection.immutable.List.foreach(List.scala:318)
位于scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
位于scala.collection.AbstractTraversable.map(Traversable.scala:105)
位于org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:691)
位于org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:30)
位于org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:630)
位于org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:30)
在org.apache.spark.sql.UDFRegistration.register(UDFRegistration.scala:119)上
在$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC。(:32)
在$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC。(:37)
在$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC。(:39)
在$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC。(:41)
在$iwC$$iwC$$iwC$$iwC$$iwC$$iwC。(:43)
在$iwC$$iwC$$iwC$$iwC$$iwC。(:45)
在$iwC$$iwC$$iwC$$iwC。(:47)
在$iwC$$iwC$$iwC。(:49)
$iwC$$iwC。(:51)
。。。等等
有什么帮助吗?

UDF注册只有两种主要变体。register可用于标准(非聚合)UDF:

  • 采用Scala闭包(
    Function[i]
    )的函数,其中
    i
    从0到22
  • 一种采用
    UDF[i]
    的方法,该方法是为Java互操作性而设计的,其中
    i
    从1变为22
getStr
UserDefinedFunction
,因此它与这两个函数都不匹配。为了能够正确地
注册
包装函数,您应该直接传递它:

sqlContext.udf.register("getStr", (s:String) => ...)

我没有导入org.apache.spark.sql.functions。现在问题解决了。

你到底想用这个UDF做什么?我没有导入org.apache.spark.sql.functions_