【问题标题】:Can I get a Scala case class definition from an Avro schema definition?我可以从 Avro 模式定义中获取 Scala 案例类定义吗?
【发布时间】:2013-03-14 11:25:02
【问题描述】:

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

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

谢谢,感谢任何建议。 -朱利安

【问题讨论】:

    标签: scala schema case-class avro


    【解决方案1】:

    看起来你在https://github.com/julianpeeters/avro-scala-macro-annotations 上使用类型提供程序

    【讨论】:

    • 注意:我不确定 scala 宏将来是否能够生成类型
    【解决方案2】:

    我一直在破解一个名为 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 上可用。

    【讨论】:

    • 非常好。保持良好的工作。你考虑把它放到有编译时反射版本的地方吗?
    • 还没有,但那将是一个非常有趣的项目。想帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2015-11-28
    • 2019-09-24
    • 2013-08-19
    • 2019-01-26
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多