无法修改JavaRDD中的值

时间:2018-12-05 06:30:09

标签: java apache-spark rdd

我有一个有关如何更新JavaRDD值的问题。

我有一个JavaRDD<CostedEventMessage>,其中的消息对象包含有关应将其写入kafka主题分区的信息。

我正在尝试使用以下代码更改此类对象的partitionId字段:

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

repartitionEvent逻辑为:

costedEventMessage.setPartitionId(1);
return costedEventMessage;

但是修改不会发生。

能否请您说明为什么以及如何正确修改JavaRDD中的值?

1 个答案:

答案 0 :(得分:0)

Spark是惰性的,因此从上面粘贴的代码尚不清楚您是否实际上对JavaRDD执行了任何操作(例如collectforEach),以及如何得出结论认为数据是没有改变。

例如,如果您通过运行以下代码来假定这样做:

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

messagesLst中的每个元素都将分区设置为1,这是错误的。 如果您添加了以下示例,那将成立:

messagesLst = rddToKafka.collect();

有关更多详细信息,请参见documentation