sql-server - 使用 Apache Spark 2.4 从存储为 SQL Server 2016 中的二进制(序列化哈希表)的 Spark Dataframe 列获取哈希表/映射
问题描述
在一个遗留应用程序中,在 DB - SQL Server 2016 中,我们有一个表 - 措施
它有 15+ 列,其中一列是二进制的
当我加载到 Spark 并打印 Schema 时,它的二进制文件
scala> jdbcDF.printSchema()
root
|-- measurementValues: binary (nullable = true)
|-- measure: string (nullable = true)
看起来,他们使用了Hashtable,将其序列化并作为二进制存储到 Table Column
我正在尝试将其反序列化回哈希表(或)映射(或)某些集合,以便在执行 ETL 操作时能够转换为 JSON 格式
有人可以在这里帮忙吗?我试图将二进制文件转换为字符串,仍然没有用:(
val convertToString = udf((a: Array[Byte])=> new String(a))
解决方案
def deserializeBinary = udf((x: Array[Byte]) => {
val stream: InputStream = new ByteArrayInputStream(x);
val obs = new ObjectInputStream(stream)
val stock = obs.readObject.asInstanceOf[util.Hashtable[String, String]]
stock
})
推荐阅读
- c++ - OpenGL中的旋转立方体
- java - 如何在反应原生应用程序中使用 FLAG_INSISTENT
- apache-kafka - 如何通过拉取查询在 Kafka 和 ksqldb 中获取摘要/聚合表
- apache-spark - DataBricks 集群 - Spark 作业停止而没有任何进展
- python - 如何使用线程从while循环中获取参数的值?
- .net - 引发无法加载文件“System.Web.Entity”。在项目 .net 上
- flutter - Flutter 插件大小是否必须小于 10 MB?
- java - 与正则表达式键匹配的复杂房间多对多关系
- oracle - PL/SQL 性能分页游标(具有过滤和固定结果大小)
- python - BACpypes - 无法从模拟输入中检索描述属性