Я пытаюсь создать набор данных с некоторыми геоданными, используя Spark и Esri. Если Foo
имеет только поле Point
, это будет работать, но если я добавлю некоторые другие поля помимо Point
, я получу ArrayIndexOutOfBoundsException.
import com.esri.core.geometry.Point
import org.apache.spark.sql.{Encoder, Encoders, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}
object Main {
case class Foo(position: Point, name: String)
object MyEncoders {
implicit def PointEncoder: Encoder[Point] = Encoders.kryo[Point]
implicit def FooEncoder: Encoder[Foo] = Encoders.kryo[Foo]
}
def main(args: Array[String]): Unit = {
val sc = new SparkContext(new SparkConf().setAppName("app").setMaster("local"))
val sqlContext = new SQLContext(sc)
import MyEncoders.{FooEncoder, PointEncoder}
import sqlContext.implicits._
Seq(new Foo(new Point(0, 0), "bar")).toDS.show
}
}
Исключение в потоке «main» java.lang.ArrayIndexOutOfBoundsException: 1 в org.apache.spark.sql.execution.Queryable $$ anonfun $ formatString $ 1 $$ anonfun $ apply $ 2.apply (Queryable.scala: 71) в org.apache .spark.sql.execution.Queryable $$ anonfun $ formatString $ 1 $$ anonfun $ apply $ 2.apply (Queryable.scala: 70) в scala.collection.TraversableLike $ WithFilter $$ anonfun $ foreach $ 1.apply (TraversableLike.scala: 772) в scala.collection.mutable.ResizableArray $ class.foreach (ResizableArray.scala: 59) в scala.collection.mutable.ArrayBuffer.foreach (ArrayBuffer.scala: 47) в scala.collection.TraversableLike $ WithFilter.foreach (TraversableLike .scala: 771) в org.apache.spark.sql.execution.Queryable $$ anonfun $ formatString $ 1.apply (Queryable.scala: 70) в org.apache.spark.sql.execution.Queryable $$ anonfun $ formatString $ 1 .apply (Queryable.scala: 69) в scala.collection.mutable.ArraySeq.foreach (ArraySeq.scala: 73) в org.apache.spark.sql.execution.Queryable $ class.formatString (Que ryable.scala: 69) в org.apache.spark.sql.Dataset.formatString (Dataset.scala: 65) в org.apache.spark.sql.Dataset.showString (Dataset.scala: 263) в org.apache.spark .sql.Dataset.show (Dataset.scala: 230) в org.apache.spark.sql.Dataset.show (Dataset.scala: 193) в org.apache.spark.sql.Dataset.show (Dataset.scala: 201 ) в Main $ .main (Main.scala: 24) в Main.main (Main.scala)