ScalaでのAvroの操作を容易にするために、.avroファイルで保存されたスキーマに基づいてケースクラスを定義したいと思います。私は試すことができます:
- .scalaケースクラス定義を手動で記述します。
- プログラムで.scalaファイルに文字列を書き込む
- ObjectWebのASMのようなバイトコードライブラリでケースクラス定義を偽装します
- SpecificCompilerのトリック?
- 実行時に既存のケースクラス定義を変更しますか?
ありがとう、どんなアドバイスも大歓迎です。-ジュリアン
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がMavenCentralで利用できるようになりました。
https://github.com/julianpeeters/avro-scala-macro-annotationsでタイププロバイダーに手を汚したようです