Ошибка создания Spark DataSet с массивом байтовых массивов - PullRequest
0 голосов
/ 26 ноября 2018

Я создаю набор данных 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-адресов, закодированных как сами байтовые массивы.

1 Ответ

0 голосов
/ 26 ноября 2018

Хорошо, я спросил об этом, когда застрял, но, поверьте, я нашел решение.Похоже, что определение моего типа класса дела с помощью Option сделало свое дело.

scala> case class HbaseRow(
 |     ip: Array[Option[Array[Byte]]]
 | )
defined class HbaseRow

scala> df.select($"ip").as[HbaseRow]
res13: org.apache.spark.sql.Dataset[HbaseRow] = [ip: array<binary>]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...