ApacheBeamWriteToJdbc:java.lang.IllegalArgumentException:未知编码器URNbeam:coder:pickled_python:v1
创始人
2024-09-05 12:00:57
0

Java 要解决此问题,请使用可序列化类型作为 Beam PTransform 的输出,并配置正确的 Beam 编码器。一些 JDBC 驱动程序可能不支持所有 Java 对象类型。使用 Serializable 或兼容类型可以更好地支持 JDBC 驱动程序。例如,以下示例将 Beam PCollection 中的 Person 对象转换为 Map 并使用 JdbcIO.write()写入 JDBC 表中:

PCollection persons = ...;

// Convert Person objects to Maps PCollection> personMaps = persons.apply( MapElements.into(TypeDescriptors.maps(TypeDescriptors.strings(), TypeDescriptor.of(Object.class))) .via(Person::toMap));

// Write maps to a JDBC table personMaps.apply(JdbcIO.>write() .withDataSourceConfiguration(JdbcIO.DataSourceConfiguration .create("org.postgresql.Driver", "jdbc:postgresql://host:port/database") .withUsername("username") .withPassword("password")) .withStatement("INSERT INTO person (id, name, age) VALUES (?, ?, ?)") .withPreparedStatementSetter((element, statement) -> { statement.setInt(1, element.get("id")); statement.setString(2, element.get("name")); statement.setInt(3, element.get("age")); }));

Python 在 Python SDK 中,JdbcWriteTransform 在创建操作并调用 JdbcWriteFn.write 方法时,在 Beam 中为每个 PCollection 元素使用依赖于 Python pickle 的默认编码。由于未实现使用这种序列化模式的 Java 编码器实现,因此 Beam 会在创建 coder 时抛出上述异常。

此问题的一种解决方法是将 Java 类型映射到序列化的 Python 对象类型。代码示例:

import apache_beam as beam import psycopg2 import cPickle

class PickledPythonCoder(object): def encode(self, value): return cPickle.dumps(value)

def decode(self, value): return cPickle.loads(value)

def is_deterministic(self): return True

def eq(self, other): return isinstance(other, PickledPythonCoder)

coder = PickledPythonCoder()

class Person(object): def init(self, id, name, age): self.id = id self.name = name self.age = age

def asTuple(self): return (self.id, self.name, self.age)

class WriteToDB(beam.DoFn):

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...