Как отправить объект Java в качестве значения в производителя <K, V>? - PullRequest
2 голосов
/ 25 июня 2019

Можно ли отправить объект Java в качестве значения в теме Kafka и как мне использовать его в spark?

В настоящее время я занимаюсь учебником по apache-spark и мне было интересно, возможно ли эточтобы отправить что-то еще, чем строка.В учебном пособии есть такой пример

producer.send(new ProducerRecord<String, String>(topic, something_string));

Возможно ли сделать что-то подобное?

Car car = new Car(brand, year, color);
producer.send(new ProducerRecord<String, Car>(topic, car));

И как мне использовать его позже в Spark?

НаВ тот момент, когда я делаю это:

String car = brand + "," + year + "," + color;
producer.send(new ProducerRecord<String, String>(topic, car));

Где я помещаю все в строку с разделением запятыми.

Вопрос 2: В данный момент я потребляю это таким образом.

Dataset<String> words = df
.selectExpr("CAST (value AS STRING)")
.as(Encoders.STRING());

где я получаю строку: "brand,year,color"

как мне разделить ее и поместить в отдельные столбцы?

1 Ответ

0 голосов
/ 25 июня 2019

Ваше сообщение на самом деле имеет два вопроса, вы можете разделить их на отдельные сообщения. По 1-му вопросу обращайтесь к этой записи ; Основная идея заключается в том, что вы должны написать собственный сериализатор.

Во-вторых, концепция в принципе остается прежней, однако на этот раз вы должны написать собственный десериализатор (декодер) на стороне Spark. См. эту документацию Spark , она демонстрирует, как поток должен быть создан из Kafka. Однако, пожалуйста, не используйте класс KafkaUtil, см. javadoc . У него есть методы для создания потоков с классами декодера Kafka.

...