我可以从 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 案例类定义吗?的主要内容,如果未能解决你的问题,请参考以下文章