apache-spark-sql - 将 Oracle blob 列(图像数据)写入文件的问题
问题描述
尝试将 blob 数据写入文件时,出现以下异常。
代码 :
Dataset<Row> dataset = sparkSession.read()
.format("jdbc")
.option("url", "jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxx )(PORT = 1234))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = xx)))")
.option("dbtable", "(select UTL_RAW.CAST_TO_VARCHAR2(UTL_RAW.CAST_TO_RAW(lob_id)) as lob_id , blob_data from tableX ) test1")
.option("user", "user")
.option("password", "pass")
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load();
dataset.foreach((ForeachFunction<Row>) row -> {
String lobId = row.getAs("LOB_ID");
byre blobData[] = (byte[])row.getAs("BLOB_DATA");
Path filePath = Paths.get("/some/path/xx.dat" );
Files.write(filePath, blobData);
}
);
错误:
Exception:java.io.NotSerializableException: com.xx
Serialization stack:
- object not serializable (class: com.xx, value: com.xx@2d34866a)
- element of array (index: 0)
- array (class [Ljava.lang.Object;, size 1)
- field (class: java.lang.invoke.SerializedLambda, name: capturedArgs, type: class [Ljava.lang.Object;)
- object (class java.lang.invoke.SerializedLambda, SerializedLambda[capturingClass=class com.xx, functionalInterfaceMethod=org/apache/spark/api/java/function/ForeachFunction.call:(Ljava/lang/Object;)V, implementation=invokeSpecial - writeReplace data (class: java.lang.invoke.SerializedLambda)
- object (class com.xx$$Lambda$1655/1788026663, com.xx$$Lambda$1655/1788026663@28b8c2f9)
- element of array (index: 0)
- array (class [Ljava.lang.Object;, size 1)
- field (class: java.lang.invoke.SerializedLambda, name: capturedArgs, type: class [Ljava.lang.Object;)
解决方案
推荐阅读
- javascript - user.roles.map 抛出无法读取未定义 Discord.js 的地图
- javascript - 如何在全日历中更改时隙格式
- excel - 在子过程中传递类模块的实例
- python - Django将图像保存到数据库
- sqlite - 尝试将带有破折号的 JSON 字符串从 Tcl 传递到浏览器,但无法解析?
- python - 如何使用 tf.keras.Model.summary 和 plot_model 查看子模型的层,而不是看到模型打印最终的顺序层?
- mysql - 美国的产品组在 SQL 中没有销售
- ckeditor - 使用 dropzone.js 时无法保存 CKEditor 的数据
- vim - 有时 Vim 开始忽略 Ctrl 键上的映射
- node.js - 为什么我的 digitalocean 液滴不会从我的 API 请求中返回任何内容