我正在使用case类和spark.sql({query}).as[MyCaseClass]语法在scala中创建Spark数据集
一切都很好,直到我尝试创建一个定义为我的成员之一的数据集 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)
使用Option定义我的case类类似乎已经成功了。
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]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。