Я хочу создать схему avro из класса case scala.
Предположим, у меня есть следующий класс scala case:
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 schema? используя sbt, например? Я видел sbt-avro4s, который позволяет построить класс scala из схемы avro, но мне нужно сделать обратное.
Заранее спасибо за помощь
Никогда не делал этого раньше, у вас есть пример, пожалуйста?
Как я уже сказал, я тоже этого не делал, так что у меня нет игрушечного примера... Однако я знаю, что Circe-genericупаковка использует Бесформенный для автоматического получения кейс-классы, но я не уверен, что это подходящее место для Начало. В книге они предоставляют пример общего вывода классов типов для типов продуктов, использующих HList, что похоже на то, что вы хотите.
Спасибо за Ваш ответ. Я попробую это.





Avro4s содержит логику для создания схемы Avro из case class.
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. Я сделаю некоторые recherches и дам вам знать. Спасибо !
Как можно сохранить схему avsc, добавив задачу sbt? Я нашел только простые примеры с hello world или что-то в этом роде. Можно ли это сделать в build.sbt?
Вы можете написать свой собственный SBT задача _, используя общий вывод Бесформенный, это вполне возможно... но поначалу это будет нелегко, потому что вам придется многому научиться - это может помочь вам начать работу. _Отказ от ответственности: Я никогда не делал ничего подобного до (хотя хочу сделать в ближайшее время), поэтому я не могу вам помочь, но я знаю, что это можно сделать таким образом.