2013-03-25 50 views
15

为了方便在Scala中使用Avro,我想定义一个基于与.avro文件一起存储的模式的案例类。我可以尝试:我可以从Avro模式定义中获得Scala案例类定义吗?

  1. 手写一个.scala案例类的定义。
  2. 编程字符串写入到文件.scala
  3. 欺骗的情况下类定义了字节码库像 ObjectWeb的ASM
  4. SpecificCompiler花样?
  5. 在运行时修改现有的案例分类定义?

谢谢,任何意见表示赞赏。 -Julian

回答

14

我一直在黑客一个名为Scalavro的小项目去其他方式(斯卡拉类型为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的中央可用。

+0

很不错的了你的手脏有型供应商。保持良好的工作。你考虑把它带到哪里有编译时反射版本? – 2014-03-11 17:13:34

+0

尚未,但这将是一个真正有趣的项目。想帮忙吗? – 2014-03-12 04:55:49

相关问题