2017-04-26 7 views
0

Ich verwende einen Datentyp namens Point (x: Double, y: Double). Ich versuche, Spalten _C1 und _C2 als Eingabe für Point() zu verwenden, und dann eine neue Spalte von Punktwerten erstellen, wieSpark 2.1.0 UDF Schematyp nicht unterstützt

val toPoint = udf{(x: Double, y: Double) => Point(x,y)} 

folgt Dann rufe ich die Funktion:

val point = data.withColumn("Point", toPoint(watned("c1"),wanted("c2"))) 

Wenn jedoch ich erkläre die UDF ich die folgende Fehlermeldung erhalten:

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 

ich richtig diesen Datentyp importiert haben, und verwendet es schon viele Male zuvor. Jetzt, wo ich versuche, es in das Schema meines UDFs aufzunehmen, erkennt es es nicht. Was ist die Methode, andere Typen als der Standard-Int, String, Array enthält, etc ...

Ich bin mit Spark-2.1.0 auf Amazon EMR.

Hier einige verwandte Fragen, die ich verwiesen habe:

How to define schema for custom type in Spark SQL?

Spark UDF error - Schema for type Any is not supported

+0

Was ist 'willed()' in Ihrem Beispiel? – himanshuIIITian

+0

@himanshulllTian Sorry, das ist die Datenbank mit den Spalten c1, c2, c3 usw. – user306603

+0

Haben Sie überlegt, meine Antwort zu akzentieren? –

Antwort

0

Sie Point als Fall Klasse

case class Point(x: Double, y: Double) 

oder wenn Sie

wollen definieren sollten

Auf diese Weise wird das Schema automatisch von Spark abgeleitet

+0

dies tun bekomme ich folgende Fehlermeldung: 'Fallklasse myPoint hat Fall Vorfahren geotrellis.vector.Point, aber von Fall zu Fall Vererbung ist verboten. Um diese Einschränkung zu umgehen, verwenden Sie Extraktoren, um eine Übereinstimmung mit Nicht-Blatt-Knoten zu finden.' – user306603

Verwandte Themen