我可以从 Avro 模式定义中获取 Scala 案例类定义吗?

Posted

技术标签:

【中文标题】我可以从 Avro 模式定义中获取 Scala 案例类定义吗?【英文标题】:Can I get a Scala case class definition from an Avro schema definition? 【发布时间】:2013-03-14 11:25:02 【问题描述】:

为了便于在 Scala 中使用 Avro,我想根据存储在 .avro 文件中的模式定义一个案例类。我可以试试:

    手动编写 .scala 案例类定义。 以编程方式将字符串写入 .scala 文件 使用字节码库欺骗案例类定义,例如 ObjectWeb 的 ASM 具体的编译器技巧? 在运行时修改现有案例分类定义?

谢谢,感谢任何建议。 -朱利安

【问题讨论】:

【参考方案1】:

看起来你在https://github.com/julianpeeters/avro-scala-macro-annotations 上使用类型提供程序

【讨论】:

注意:我不确定 scala 宏将来是否能够生成类型【参考方案2】:

我一直在破解一个名为 Scalavro 的小项目,以另辟蹊径(Scala 类型为 Avro 模式)。它还为您提供直接的二进制 I/O。

简单示例:

package com.gensler.scalavro.tests
import com.gensler.scalavro.types.AvroType

case class Person(name: String, age: Int)

val personAvroType = AvroType[Person]
personAvroType.schema

产生:


  "name": "Person",
  "type": "record",
  "fields": [
    "name": "name", "type": "string",
    "name": "age", "type": "int"
  ],
  "namespace": "com.gensler.scalavro.tests"

在项目网站(上面链接)和最新规范中还有更多示例。

我计划在不久的将来在 Sonatype OSS 上托管二进制文件,但现在你可以从 github 和sbt publish-local 获取源代码,如果你想试试的话。

更新:Scalavro 现已在 Maven Central 上可用。

【讨论】:

非常好。保持良好的工作。你考虑把它放到有编译时反射版本的地方吗? 还没有,但那将是一个非常有趣的项目。想帮忙吗?

以上是关于我可以从 Avro 模式定义中获取 Scala 案例类定义吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Java 中的 avro 文件中提取模式

HDFS 中的 Avro 模式生成

Avro 模式中的多态性和继承

如何从 SPARK SCALA 中的 XML 模式中获取列名?

如何跨团队共享 avro 模式定义

如何从 Debezium 创建的 avro 消息中获取字段?