gpt4 book ai didi

avro - 如何在不再次定义的情况下在另一种 Avro 类型中使用 Avro 类型?

转载 作者:行者123 更新时间:2023-12-05 06:15:26 26 4
gpt4 key购买 nike

我在名为 commonSourceMetadata.avsc 的 json 文件中定义了一个名为 "some.package.SourceMetadata" 的 Avro 类型:

{
"type": "record",
"name": "SourceMetadata",
"namespace": "some.package",
"fields": [..]
}

我正在尝试在另一个 avsc 文件中使用它,使用我在 Apache Avro 1.7.3 中找到的 imports 关键字:

  "imports": ["commonSourceMetadata.avsc"],
"fields": [
{
"name": "sourceMetadata",
"type": "some.package.SourceMetadata"
},

我也试过:

  "fields": [
{
"name": "sourceMetadata",
"imports": ["commonSourceMetadata.avsc"],
"type": "some.package.SourceMetadata"
},

Apache Avro 版本是 1.9

我仍然得到:

org.apache.avro.SchemaParseException: "some.package.SourceMetadata" is not a defined name. The type of the "sourceMetadata" field must be a defined name or a {"type": ...} expression.
at org.apache.avro.Schema.parse(Schema.java:1637)

我也很清楚它没有考虑 importsimport 因为我试图导入一个不存在的文件并且没有提示。

如何让它成为定义的名称

我们使用 Scala、SBT 和 AvroHugger 插件从 avsc Avro 类型定义生成 Scala 案例类。

最佳答案

Avro schema 格式(在 JSON 中,通常带有 .avsc 扩展名)由 specification 定义.

Avro IDL 格式 是一种不同的非 JSON syntax ,旨在让编写 RPC 协议(protocol)的开发人员熟悉。

import 关键字仅在 IDL 中受支持。这是有意为之的,因为共享模式 (JSON) 不应该还需要共享文件系统。

看起来 AvroHugger 提供了两种方法来做你想做的事:

  1. 在生成案例类和 AvroHugger 时简单地包含所有 avsc 文件 should be able to resolve名字,或者
  2. 使用允许 import 关键字的 IDL 格式(AvroHugger 也支持)。

关于avro - 如何在不再次定义的情况下在另一种 Avro 类型中使用 Avro 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62535519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com