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

时间:2013-03-25 03:15:51

标签: scala schema case-class avro

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

  1. 手动编写.scala案例类定义。
  2. 以编程方式将字符串写入.scala文件
  3. 用类似字节码库欺骗case类定义 ObjectWeb的ASM
  4. SpecificCompiler技巧?
  5. 在运行时修改现有的案例分类定义?
  6. 谢谢,任何建议表示赞赏。 -Julian

2 个答案:

答案 0 :(得分: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

产生:

{
  "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上使用。

答案 1 :(得分:3)

看起来你在https://github.com/julianpeeters/avro-scala-macro-annotations

的类型提供商那里弄得很脏