首页 > 解决方案 > 使用 Spark 转换 Oracle RAW 类型

问题描述

我在 Oracle DB 中有一个表,其中包含存储为RAW 类型的列。我正在建立一个 JDBC 连接来读取该列,当我打印结果数据帧的架构时,我注意到我有一个二进制数据类型的列。这正是我所期待的。

问题是我需要能够将该列作为字符串读取,所以我认为一个简单的数据类型转换就可以解决它。

df.select("COLUMN").withColumn("COL_AS_STRING", col("COLUMN").cast(StringType)).show

但我得到的是一堆随机字符。由于我正在处理 RAW 类型,因此可能不存在此数据的字符串表示形式,因此,为了安全起见,我做了简单的选择以从源中获取第一行(使用 sqoop-eval)并且不知何故sqoop 可以将此列显示为字符串。

然后我认为这可能是一个编码问题,所以我尝试了这个:

df.selectExpr("decode(COLUMN,'utf-8')").show

使用 utf-8 和一堆其他编码。但我得到的只是随机字符。

有谁知道我该如何进行这种数据类型转换?

标签: apache-sparkjdbcapache-spark-sqlsqoop

解决方案


推荐阅读