【问题标题】:Generate avsc avro schema from a scala case class at build在构建时从 scala 案例类生成 avsc avro 模式
【发布时间】:2019-01-31 15:02:41
【问题描述】:

我想从一个 scala 案例类生成一个 avro 模式。

假设我有以下 scala 案例类:

case class User(name : String, favorite_number: Int, favorite_color: String)

相关的avro架构是:

{"namespace": "example.avro",
 "type": "record",
 "name": "User",
 "fields": [
     {"name": "name", "type": "string"},
     {"name": "favorite_number",  "type": "int"},
     {"name": "favorite_color", "type": "string"}
 ]
}

有没有办法在构建时生成 avro scehma ?例如使用 sbt 吗? 我看到sbt-avro4s 允许从 avro 模式构建 scala 类,但我需要做相反的事情。

提前感谢您的帮助

【问题讨论】:

  • 你可以使用Shapeless泛型推导编写你自己的SBT task _,这是完全可以做到的......但是,一开始并不容易,因为你必须学习很多 - @ 987654324@ 可以帮助您入门。 _免责声明:我之前从未做过类似的事情(虽然我想尽快做),因此,我无法帮助您 - 但我知道可以做到这一点方式。
  • 以前没做过,请问有例子吗?
  • 正如我所说,我也没有做过,所以我没有任何玩具示例......但是,我知道Circe-generic package 使用 Shapeless 来提供案例类的自动派生,但我不确定这是否是一个好的起点。在书中,他们为使用HList 的产品类型提供了example of generic derivation of typeclasses,这与您想要的类似。
  • 感谢您的回答。我会试试的。

标签: scala avro avro-tools avro4s


【解决方案1】:

Avro4s 包含从 case class 生成 Avro Schema 的逻辑。

https://github.com/sksamuel/avro4s#schemas

以下项目示例:

import com.sksamuel.avro4s.AvroSchema

case class User(name : String, favorite_number: Int, favorite_color: String)
val userSchema = AvroSchema[User]

如果需要,希望这足以开始sbt 任务。

【讨论】:

  • 你是对的!我从来没有写过 sbt 任务。我会做一些研究并让你知道。谢谢!
  • 如何通过添加 sbt 任务来存储 avsc 模式?我只找到了 hello world 或类似的简单示例。是否可以在 build.sbt 中做到这一点?
猜你喜欢
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 2021-06-19
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多