Невозможно изменить значение в JavaRDD - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть вопрос о том, как обновить значения JavaRDD.

У меня есть JavaRDD<CostedEventMessage> с объектами сообщений, содержащими информацию о том, в какой раздел темы кафки он должен быть записан.

Я пытаюсь изменить поле partitionId таких объектов, используя следующий код:

rddToKafka = rddToKafka.map(event -> repartitionEvent(event, numPartitions));

, где логика repartitionEvent:

costedEventMessage.setPartitionId(1);
return costedEventMessage;

Но модификация неслучиться.

Не могли бы вы дать совет, почему и как правильно изменить значения в JavaRDD?

1 Ответ

0 голосов
/ 05 декабря 2018

Spark является ленивым, поэтому из кода, который вы вставили выше, не ясно, выполняли ли вы какие-либо действия с JavaRDD (например, collect или forEach) и как вы пришли к выводу, что данные не были изменены.

Например, если вы предполагали, что, запустив следующий код:

List<CostedEventMessage> messagesLst = ...;
JavaRDD<CostedEventMessage> rddToKafka = javaSparkContext.parallelize(messagesLst);
rddToKafka = rddToKafka.map(event -> repartitionEvent(event, numPartitions));

Каждый элемент в messagesLst будет иметь раздел, установленный в 1, вы ошибаетесь.Это будет верно, если вы добавите, например:

messagesLst = rddToKafka.collect();

Для получения более подробной информации см. документация

...