Я создаю набор данных Spark в scala с использованием класса case и синтаксиса spark.sql({query}).as[MyCaseClass]
Все в порядке, пока я не попытаюсь создать набор данных с одним из моих членов, определенным как Array[Array[Byte]]
case class HbaseRow(
ip: Array[Array[Byte]]
)
val hbaseDataSet = spark
.sql("""select ip from test_data""")
.as[HbaseRow]
Обычно это работает нормально, но с массивом байтовых массивов это не удается.
java.lang.ClassCastException:
org.apache.spark.sql.types.BinaryType$ cannot be cast to org.apache.spark.sql.types.ObjectType
at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$org$apache$spark$sql$catalyst$ScalaReflection$$arrayClassFor$1.apply(ScalaReflection.scala:106)
at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$org$apache$spark$sql$catalyst$ScalaReflection$$arrayClassFor$1.apply(ScalaReflection.scala:95)
at scala.reflect.internal.tpe.TypeConstraints$UndoLog.undo(TypeConstraints.scala:56)
столбец является искровым массивом IP-адресов, закодированных как сами байтовые массивы.