开发者社区> 问答> 正文

使用bytearrays数组创建Spark DataSet时出错

我正在使用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)

展开
收起
社区小助手 2018-12-06 15:31:54 2059 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    使用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]

    2019-07-17 23:18:34
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载