Использование Spark потоковой передачи (записано в Scala ) для чтения сообщений от Kafka.Все сообщения представляют собой строки в формате Json.
Определение ожидаемой схемы в локальной переменной expectedSchema
с последующим синтаксическим анализом строк в СДР для Json
spark.sqlContext.read.schema(schema).json(rdd.toDS())
Проблема: Spark будет обрабатывать все записи / строки, пока у него есть некоторые поля, которые я пытаюсь прочитать, даже если фактический формат Json (то есть схема) входной строки (String) не совпадает с моим expectedSchema
.
Предположим, что ожидаемая схема выглядит следующим образом (в Json): {"a": 1,"b": 2, "c": 3}
и строка ввода выглядит следующим образом: {"a": 1, "c": 3}
Spark обработает ввод без сбоев.
Я попытался использовать решение, описанноездесь: Как применить схему с nullable = false к чтению json
, но assert(readJson.schema == expectedSchema)
никогда не завершится ошибкой, даже если я намеренно отправляю входные строки с неверной схемой Json.
Есть ли способ проверить, соответствует ли фактическая схема заданной строки ввода моей ожидаемой схеме?
Можно ли вставитьнулевое значение для «заполнения» полей, отсутствующих в «поврежденной» строке схемы?