我想将dstream元素添加到ArrayBuffer以进行进一步的处理。但是它不能工作。
var newBatchMeter = new ArrayBuffer[String]()
newBatchReadingDstream.foreachRDD( rdd => {
for(item <- rdd.collect()) {
newBatchMeter += item.ID
}
})
newBatchMeter.foreach(println)
答案 0 :(得分:0)
这不起作用的原因是foreach子句在worker中执行,并且您的数组缓冲区在驱动程序上声明。
收集DStream
将无效,因为它是一个无限的流,您可以将数据保存到文件中,然后将它们加载到ArrayBuffer中。
我认为最好的方法是找到一种方法来使用DStream
原语对ArrayBuffer进行处理
类似的东西:
newBatchReadingDstream.map(item => item.ID)