apache NiFi 将 JSON 转换为 avro
apache NiFi convert JSON to avro
如何在 apache NiFi 中将 JSON 转换为 Avro?
即JSON是使用getTwitter
获得的?
以前的版本似乎支持 ConvertJSONToAvro
。
在我看来,现在应该使用 convertRecord 处理器:
即使用面向记录的处理来读取 JSON 使用 JSON 树 reader 并将其写入 Avro。
但是我在哪里/如何指定模式?特别是对于从 Twitter 获得的复杂模式。 NiFi 是否以某种方式自动猜测正确的模式?
编辑
事实上,发生了一些相当明显的事情:
ConvertRecord Failed to process StandardFlowFileRecord will route to failure: ${schema.name} did not provide appropriate Schema Name
即转换记录成功解析 json,但在尝试应用 avro writer 时失败。那么我怎样才能从推文中获得 avro 表示呢?
您应该能够推断模式并使用现代记录处理器将其自动转换为 Avro。 Abdelkrim Hadjidj has a great write up 关于它,但总结一下:
现代方法
在您在 ConvertRecord
中使用的 JsonPathReader
或 JsonTreeReader
实现中使用 模式推理 功能。这将允许它推断架构,然后通过 schema.name
和 avro.schema
属性将其传递给 AvroRecordSetWriter
。还有一个模式推理缓存(除非您有其他要求,否则请使用提供的易失性实现)来提高性能。
旧方法
使用 InferAvroSchema
处理器解析传入数据并生成 Avro 模式。
注意:由于 space 限制,此处理器不再包含在 NiFi 的默认构建中,但您可以手动构建 nifi-kite-nar
,然后将其部署到 $NIFI_HOME/extensions/
目录以加载该功能。
如何在 apache NiFi 中将 JSON 转换为 Avro?
即JSON是使用getTwitter
获得的?
以前的版本似乎支持 ConvertJSONToAvro
。
在我看来,现在应该使用 convertRecord 处理器:
即使用面向记录的处理来读取 JSON 使用 JSON 树 reader 并将其写入 Avro。 但是我在哪里/如何指定模式?特别是对于从 Twitter 获得的复杂模式。 NiFi 是否以某种方式自动猜测正确的模式?
编辑
事实上,发生了一些相当明显的事情:
ConvertRecord Failed to process StandardFlowFileRecord will route to failure: ${schema.name} did not provide appropriate Schema Name
即转换记录成功解析 json,但在尝试应用 avro writer 时失败。那么我怎样才能从推文中获得 avro 表示呢?
您应该能够推断模式并使用现代记录处理器将其自动转换为 Avro。 Abdelkrim Hadjidj has a great write up 关于它,但总结一下:
现代方法
在您在 ConvertRecord
中使用的 JsonPathReader
或 JsonTreeReader
实现中使用 模式推理 功能。这将允许它推断架构,然后通过 schema.name
和 avro.schema
属性将其传递给 AvroRecordSetWriter
。还有一个模式推理缓存(除非您有其他要求,否则请使用提供的易失性实现)来提高性能。
旧方法
使用 InferAvroSchema
处理器解析传入数据并生成 Avro 模式。
注意:由于 space 限制,此处理器不再包含在 NiFi 的默认构建中,但您可以手动构建 nifi-kite-nar
,然后将其部署到 $NIFI_HOME/extensions/
目录以加载该功能。