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

Jul*_*ers 16 schema scala case-class avro

为了便于在Scala中使用Avro,我想基于存储在.avro文件中的模式来定义案例类.我可以尝试:

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

谢谢,任何建议表示赞赏.-Julian

Con*_*yle 14

我一直在攻击一个名为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
Run Code Online (Sandbox Code Playgroud)

产量:

{
  "name": "Person",
  "type": "record",
  "fields": [
    {"name": "name", "type": "string"},
    {"name": "age", "type": "int"}
  ],
  "namespace": "com.gensler.scalavro.tests"
}
Run Code Online (Sandbox Code Playgroud)

项目网站(上面链接)和最新规范中有更多的例子.

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

更新:
Scalavro现在可在Maven Central上使用.