ApacheBeamWriteToJdbc:java.lang.IllegalArgumentException:未知编码器URNbeam:coder:pickled_python:v1
创始人
2024-09-05 12:00:32
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):

相关内容

热门资讯

实测交流“微信西楚辅助”本来有... 您好:微信西楚辅助这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别...
透视玄学!wpk是真的还是假的... 透视玄学!wpk是真的还是假的-详细开挂透视辅助方法(有挂秘笈)wpk是真的还是假的软件透明挂微扑克...
重大推荐“赣牌圈挂可以安装”从... 重大推荐“赣牌圈挂可以安装”从前有开挂辅助插件(有挂辅助)是一款可以让一直输的玩家,快速成为一个“必...
透视规律!wpk透视挂是真的-... 透视规律!wpk透视挂是真的-分享开挂透视辅助技巧(有挂辅助)1、超多福利:超高返利,海量正版游戏,...
每日必看“werplan脚本”... 每日必看“werplan脚本”从前有开挂辅助工具(的确有挂);亲,有的,ai轻松简单,又可以获得无穷...
透视黑科技!大菠萝789辅助器... 透视黑科技!大菠萝789辅助器下载-了解开挂透视辅助技巧(新版有挂)在进入大菠萝789辅助器下载辅助...
玩家攻略推荐“咸宁方片十三张透... 玩家攻略推荐“咸宁方片十三张透视脚本”本来有开挂辅助神器(有挂教程);亲真的是有正版授权,小编(透视...
透视了解!hhpoker有挂一... 透视了解!hhpoker有挂一直输-专业开挂透视辅助工具(存在有挂)hhpoker有挂一直输软件透明...
玩家亲测“新海贝之城辅助可以设... 玩家亲测“新海贝之城辅助可以设置”从前有开挂辅助软件(有挂方法)是一款可以让一直输的玩家,快速成为一...
透视中牌率!云扑克有透视-必备... 您好,云扑克有透视这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在...