将二进制 Thrift 转换为 JSON 而无需在 Scala 中创建 类
Convert binary Thrift to JSON without creating classes in Scala
我想在 Scala 中这样做:
我有一个消息系统,其中 Kafka 是入口点。数据以二进制 Thrift 编码到达 Kafka。我从那里通过 Spark Job 收集它。在那里我想将消息反序列化为 JSON 字符串。
现在据我所知,我可以通过 Thrift 生成 Scala 类,从我的消息中生成 Scala 对象,然后将它们转换为 JSON。由于我真的不关心使用 类,有没有办法通过提供 Thrift 文件直接将二进制编码数据转换为 JSON?
或者在运行时创建 类?关键是我想为新消息类型保持系统动态,因此想避免依赖正手手动创建的 Scala 类.
我希望这样说是有道理的,如果您还有其他问题,请继续:)
Thrift 并不是真正为这样的动态使用而设计的。考虑例如Avro 代替。
如果你必须用 Thrift 做这个,你可以 "just" 运行 Thrift Java 或 Scala 编译器作为外部进程,编译生成的文件(和你自己生成的胶水代码(如果有的话)(分别参见 How do I programmatically compile and instantiate a Java class? or Scala - How to compile code from an external file at runtime?,或只是 Google 更多链接),用 URLClassLoader
加载 类 并使用反射访问它们。
我想在 Scala 中这样做:
我有一个消息系统,其中 Kafka 是入口点。数据以二进制 Thrift 编码到达 Kafka。我从那里通过 Spark Job 收集它。在那里我想将消息反序列化为 JSON 字符串。 现在据我所知,我可以通过 Thrift 生成 Scala 类,从我的消息中生成 Scala 对象,然后将它们转换为 JSON。由于我真的不关心使用 类,有没有办法通过提供 Thrift 文件直接将二进制编码数据转换为 JSON? 或者在运行时创建 类?关键是我想为新消息类型保持系统动态,因此想避免依赖正手手动创建的 Scala 类.
我希望这样说是有道理的,如果您还有其他问题,请继续:)
Thrift 并不是真正为这样的动态使用而设计的。考虑例如Avro 代替。
如果你必须用 Thrift 做这个,你可以 "just" 运行 Thrift Java 或 Scala 编译器作为外部进程,编译生成的文件(和你自己生成的胶水代码(如果有的话)(分别参见 How do I programmatically compile and instantiate a Java class? or Scala - How to compile code from an external file at runtime?,或只是 Google 更多链接),用 URLClassLoader
加载 类 并使用反射访问它们。