我正在使用名为Point(x:Double,y:Double)的数据类型。我试图用_c1列和_c2作为输入点(),然后创建点值的新列如下Spark 2.1.0不支持UDF架构类型
val toPoint = udf{(x: Double, y: Double) => Point(x,y)}
然后我调用该函数:
val point = data.withColumn("Point", toPoint(watned("c1"),wanted("c2")))
然而,当我宣布UDF我得到以下错误:
java.lang.UnsupportedOperationException: Schema for type com.vividsolutions.jts.geom.Point is not supported
at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:733)
at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$2.apply(ScalaReflection.scala:729)
at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$2.apply(ScalaReflection.scala:728)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.immutable.List.map(List.scala:285)
at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:728)
at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:671)
at org.apache.spark.sql.functions$.udf(functions.scala:3084)
... 48 elided
我已经正确导入这些数据类型,并使用它之前很多次。现在我试图将它包含在我的udf的Schema中,但它不能识别它。什么是包括除标准Int,String,Array等以外的类型的方法...
我在Amazon EMR上使用Spark 2.1.0。
在这里,我引用了一些相关的问题:
How to define schema for custom type in Spark SQL?
Spark UDF error - Schema for type Any is not supported
在你的例子中'wanted()'是什么? – himanshuIIITian
@himanshulllTian对不起,这是数据库的列c1,c2,c3等 – user306603
你有没有考虑过我的答案? –