我有以下Spark Java API调用序列(Spark 2.0.2):
返回tuple2._2();
返回的JavaDStream然后由foreachPartition处理,它由foreachRDD包装。
foreachPartition的调用函数执行Iterator inputParams.next();
当收到数据时,执行步骤1,这是正确的。但是,步骤3中的inputParams.next()在步骤1中对map函数进行了重复调用。因此,每个消息都会调用两次map函数:第一次从Kafka流接收消息时,第二次当从foreachPartition的调用函数调用Iterator inputParams.next()时。
我也尝试过转换数据,如
第1步的公共TestTransformedClass调用(Tuple2 tuple2)
步骤3的public void call(Iterator inputParams)
并出现同样的问题。所以这个问题就出现了,无论这个Spark API调用序列是否涉及数据转换。
问题:
由于消息已在步骤1中处理,为什么步骤3中的inputParams.next()会在步骤1中对map函数进行重复调用?
如何修复它以避免对每条消息进行重复调用?
感谢。