我正在使用spark streaming做一些统计工作。这是我的代码:
val streamingContext = new StreamingContext(sparkSession.sparkContext, Seconds(60))
val eventHubsStream = EventHubsUtils.createUnionStream(streamingContext, eventHubsParameters)//create a stream
val accum = sparkSession.sparkContext.longAccumulator("Total Count")
eventHubsStream.foreachRDD(rdd => {
accum.add(rdd.count())
SavetoStorage(accum); //save to storage
})
当我运行上述程序时,我收到了运行时错误:
“累积器必须在发送给执行者之前注册”
我已经在这里注册了累加器:
val accum = sparkSession.sparkContext.longAccumulator("Total Count")
为什么会收到这样的错误?
由于
答案 0 :(得分:2)
如果注册累加器,则可以修复。在Spark 2.2中,下一个代码运行良好
val sc = spark.sparkContext
sc.register(accum, <Name_of_your_accumulator>);
... next actions with accumulator ...
我希望它不会在下一个版本中被打破