使用Spark Streaming时,是否可以获取DStream中每个RDD的第一个n
元素?在现实世界中,我的流包含许多地理标记的事件,我想采用最接近给定点的100(或其他)进行进一步处理,但是一个简单的例子显示我正在尝试做什么是这样的:
import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.ConstantInputDStream
import org.apache.spark.streaming.{Seconds, StreamingContext}
object take {
def main(args: Array[String]) {
val data = 1 to 10
val sparkConf = new SparkConf().setAppName("Take");
val streamingContext = new StreamingContext(sparkConf, Seconds(1))
val rdd = streamingContext.sparkContext.makeRDD(data)
val stream = new ConstantInputDStream(streamingContext, rdd)
// In the real world, do a bunch of stuff which results in an ordered RDD
// This obviously doesn't work
// val filtered = stream.transform { _.take(5) }
// In the real world, do some more processing on the DStream
stream.print()
streamingContext.start()
streamingContext.awaitTermination()
}
}
我知道我可以很容易地将顶级n
结果反馈给驱动程序,但在这种情况下我不想这样做,因为我需要在过滤后对RDD进行进一步处理下来。
答案 0 :(得分:7)
为什么不起作用?我认为你的榜样很好。
排序的代码在步骤2和4中是相同的,您只需更改分区数。
在DStream上执行步骤1,在转换操作中对RDD执行步骤2到5。