当前位置: 首页 > 知识库问答 >
问题:

如何在Apache Beam中序列化运行时创建的类

刘兴修
2023-03-14

我有一个apache-beam应用程序,它在本地使用direct-runner运行流水线,在google cloud中使用dataflow Runner运行流水线。它在本地工作,但让google dataflow Runner失败了。

以下是错误跟踪:

它指向

“...无法反序列化序列化的DofnInfo”

“...java.lang.ClassNotFoundException:Header_H”

builder = new ByteBuddy().subclass(some.class).name("Header_H").modifiers(PUBLIC);
       .defineField("serialVersionUID", long.class, STATIC, PRIVATE, FINAL).value(37L)
       .implement(Serializable.class);

Class <?> clazz = builder.make().load(getClass().getClassLoader()).getLoaded();

共有1个答案

劳嘉实
2023-03-14

Byte Buddy可以通过以下方式在jar文件中注入类:

DynamicType.Unloaded<?> type = builder.make();
builder.inject(someJar);

这将改变现有的jar文件以包含动态生成的类。这样,您就可以更改系统类路径上的现有jar。

这个API还允许您创建一个新的jar,您可以使用instrumentationAPI(通过Java代理),它允许您将这个类作为一个新的jar文件附加到类路径中。为了避免附加代理,还可以尝试将byte-buddy-agent项目用于动态附件。

这将通过以下方式实现:

File someFolder = ...
File jar = builder.saveIn(someFolder);
ByteBuddyAgent.install().appendToSystemClassLoaderSearch(new JarFile(jar));

如果Google Cloud上不允许动态附件,您可以通过命令行中的常规附件来解决这个问题。

 类似资料:
  • 我试图根据用户输入动态创建一个单声道序列。我正在调用rest API并在Mono中获得ClientResponse。我的用例是在一个序列中调用2个或多个API,下一个API的输入负载取决于前一个API的输出。 我的硬编码序列操作看起来像 这是很好的工作,但我想让这个方法通用。我想从用户的POJO列表中获取所有必需的参数,并基于列表输入创建flatMap序列。因此,如果列表的长度为2,则将有2个平面

  • 我试图在Apache Beam中使用BigtableIO的运行时参数来写入BigTable。 我创建了一个从 BigQuery 读取并写入 Bigtable 的管道。当我提供静态参数时,管道工作正常(使用 ConfigBigtableIO 和 ConfigBigtableConfiguration,请参阅此处的示例 - https://github.com/GoogleCloudPlatform/

  • 本文向大家介绍如何在Python中创建可序列化的JSON类?,包括了如何在Python中创建可序列化的JSON类?的使用技巧和注意事项,需要的朋友参考一下 序列化是将复杂数据类型的对象转换为本地数据类型的过程,以便可以轻松地将它们转换为JSON表示法。  如果您有JSON字符串,则可以使用json.dumps()方法将其转换为JSON字符串。 Python pickle模块用于对Python对象结

  • 问题内容: 我正在尝试在MySQL中创建序列(从整体上来说,我对SQL还是很新的)。我正在使用以下代码,但这会导致错误: ORDID指向我正在使用的表中的字段。如何正确创建序列? 编辑: 据称,MySQL不使用序列。我现在正在使用以下代码,但这也会引起错误。我该如何解决? 编辑: 我想我找到了解决方法。对于phpMyAdmin(我正在使用),您可以使用以下代码。 我不知道为什么它会喜欢这种方式,但

  • 问题内容: 序列化器很少,例如 我们如何创建自己的自定义序列化程序? 问题答案: 在这里,您有一个示例,将自己的序列化器/解串器用于Kafka消息值。对于Kafka消息密钥是同一回事。 我们希望将MyMessage的序列化版本作为Kafka值发送,并再次将其反序列化为使用方的MyMessage对象。 在生产者端序列化MyMessage。 您应该创建一个实现org.apache.kafka.comm

  • 如何创建自己的自定义序列化程序?