Обработка нескольких авро схем в одной теме кафки - PullRequest
0 голосов
/ 16 апреля 2020

Я использую структурированную потоковую передачу для чтения данных из Кафки и их обработки. Данные авро сериализуются. У меня есть случай использования, когда один topi c может иметь несколько схем. Я не уверен, как с ними справиться.

Вот как выглядит kafka topi c (пример)

{"key":"schema1", "value": {"actual avro data}}
{"key":"schema2", "value": {"actual avro data}}

Так мы планировали читать данные с использованием spark , но я считаю, что этот подход не будет работать

val avroPayload = x.select(
 x("key").cast(StringType) as 'key,
 x("value") as 'record
).select("record","key")

val retVal =  avroPayload.select(
      col("key"),
      col("record"),
      schemaResolverr(col("key")).alias("schema1")
    )

val b = retVal.select(
    from_avro(col("record"),(col("schema1").toString()))
    )

, где x - это DataFrame из потоковой передачи, schemaResolverr берет ключ в DF и возвращает схему из состояния c mapping

Это пример схемы

{"namespace": "app.avro",
  "type": "record",
  "name": "schema1",
    "fields": [
       {"name": "col1","type": ["null","string"], "default": null},
        {"name": "col2","type": ["null","string"], "default": null},
        {"name": "col3","type": ["null","string"], "default": null},
        {"name": "col4","type": ["null","string"], "default": null}       
    ]
}

Поскольку в фрейме данных может быть только одна схема, я не уверен, как это сработает. Пожалуйста, дайте мне знать, если нужна дополнительная информация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...