Я хотел бы написать модульный тест для функции с такой подписью:
def myFunc(rdd: RDD[ConsumerRecord[String, String]], sparkSession: SparkSession): (DataFrame, (Long, Long))
Но я не могу создать СДР ConsumerRecord, поскольку класс ConsumerRecord не сериализуем. Так что это не работает:
val consumerRecord: ConsumerRecord[String, String] =
new ConsumerRecord[String, String]("myTopic", 0, 0L, "key", "value")
val rdd = spark.sparkContext.parallelize(Seq(consumerRecord))
Я уже видел некоторые потоки в Stackoverflow, но они мне не очень помогли.
Я не могу выполнить преобразование в RDD [ConsumerRecord]
Создание вручную RDD (ConsumerRecord (String, String)) для использования в модульном тестировании (дубликат)
Объект не сериализуемо (org. apache .kafka.clients.consumer.ConsumerRecord) в Java потоковая передача spark kafka
В первой ссылке упоминается что-то о «Сериализуемый класс с использованием сериализации kryo». Как я могу это сделать?
Я начал с этого фрагмента кода:
val kryo: Kryo = new Kryo()
kryo.register(classOf[ConsumerRecord[String,String]])
val output: Output = new Output(new FileOutputStream("KryoTest.ser"))
kryo.writeObject(output, consumerRecord)
output.close()
Как мне продолжить или есть лучшие варианты?
Я использую spark -streaming-kafka10, kafka-клиентов 2.0.0 и Spark 2.2.3.