2013-03-25 106 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

相關問題