Вот мой вариант использования.
Чтение Jstring из Kafka с использованием Spark Streaming. Jstring может иметь динамические c вложенные столбцы (запись: 1 => 10 столбцов; запись: 2 => 5 столбцов). Мне нужно проанализировать его на лету, и он должен быть сглажен (вложенные столбцы) и загружен в HBASE.
Я могу выполнить sh все шаги, кроме вывода схемы Dynami c. Первоначально я пытался использовать структурированную потоковую передачу и отказался от идеи (структурированная потоковая передача не поддерживает вывод схемы).
Позже я работал над потоковой передачей искр и смог выполнить sh все шаги, но код дает аномальные результаты в тяжелой нагрузке. Вот мой пример фрагмента кода для вывода схемы.
val kafkaPrms = Map[String, Object](
"bootstrap.servers" -> "server details",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"group.id" -> "group id",
"auto.offset.reset" -> "earliest",
"enable.auto.commit" -> (true: java.lang.Boolean)
)
val tpc = Array("pm")
val strm = KafkaUtils.createDirectStream[String, String](
ssc,
PreferConsistent,
Subscribe[String, String](tpc, kafkaPrms)
)
val ist = strm.map(record => (record.value))
ist.foreachRDD(rdd => {
if (!rdd.isEmpty()) {
val jsdf = spark.read.json(rdd)
/*flattening transformation*/
/*Calling custom hbase load function using FOREACH
}
})
Но настоящая проблема заключается в том, что каждый RDD имеет несколько записей с разной схемой. Я хочу вывести схему на уровне записи. Если я перенесу чтение. json logi c внутрь FOREACH. Получение разных вопросов. Есть другой способ исправить?