scala - 使用字节数组数组创建 Spark 数据集时出错
问题描述
我正在使用案例类和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)
该列是 IP 地址的 spark 数组,其本身编码为字节数组。
解决方案
好的,我在卡住时问了这个问题,但相信我已经找到了解决方案。用 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>]
推荐阅读
- intellij-idea - 如何在 Intellij IDEA 2019.2 中编写反引号?
- flutter - 使用可交互的列表视图项和提供者模式持久化数据
- ruby-on-rails - 如何访问 Rails 控制器中的某些数据库表?
- sql - 带日期的 SQL 请求
- r - 在 R 包 Xaringan 中,无法使用无限月亮阅读器进行渲染
- .htaccess - 语言不匹配时htaccess强制重定向
- javascript - 是否可以将反应上下文注入到反应根之外的div(在主体下)
- magento2 - Magento 2 ; 无法将自定义参数传递到 UI 表单的保存按钮
- javascript - 如何使用 spry 或任何其他调整来验证表单中的图像文件
- jquery - Jquery each - Uncaught RangeError: 超出最大调用堆栈大小