Потоковая передача Spark: вывод Dynami c Json на уровне записи - PullRequest
0 голосов
/ 05 августа 2020

Вот мой вариант использования.

Чтение 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. Получение разных вопросов. Есть другой способ исправить?

...