为了便于在 Scala 中使用 Avro,我想根据存储在 .avro 文件中的模式定义一个案例类。我可以尝试:
- 手动编写 .scala 案例类定义。
- 以编程方式将字符串写入 .scala 文件
- 使用 ObjectWeb 的 ASM 之类的字节码库来欺骗案例类定义
- 具体的编译器技巧?
- 在运行时修改现有的案例分类定义?
谢谢,任何建议表示赞赏。-朱利安
为了便于在 Scala 中使用 Avro,我想根据存储在 .avro 文件中的模式定义一个案例类。我可以尝试:
谢谢,任何建议表示赞赏。-朱利安
我一直在破解一个名为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"
}
在项目站点(上面链接)和 scalatest 规范中还有更多示例。
我计划在不久的将来在 Sonatype OSS 上托管二进制文件,但现在你可以从 github 拉取源代码,sbt publish-local
如果你想尝试一下。
更新:
Scalavro现在可以在 Maven Central 上使用。