我有一个operation: RDD[T] => Unit
我希望使用spark streamingContext
作为spark工作提交。 Spark作业应从myStream
流式传输值,并将RDD[T]
的每个实例传递给operation
。
最初,我通过使用main()
函数创建一个使用myStream.foreachRDD()
并在命令行上为spark-submit
提供类名的Spark作业来完成此操作,但是,我宁愿避免在外壳上打电话,而是:使用streamingContext
提交作业。这样既优雅又允许我随意终止工作,只需拨打streamingContext.stop()
即可。
我怀疑解决方案是使用streamingContext.sparkContext.runJob()
但这需要提供我在使用spark-submit
时不必提供的其他参数:即单个RDD[T]
实例,和分区信息。有没有合理的方法为这些参数提供“默认”值(以反映spark-submit
的效用),还是有另一种方法可以让我失踪?
代码段
val streamingContext : StreamingContext = ...
val eventStream : DStream[T] = ...
eventStream.foreachRDD { rdd =>
rdd.toLocalIterator.toSeq.take(200).foreach { message =>
message.foreach { content =>
// process message content
}
}
}
streamingContext.start()
streamingContent.awaitTermination()
注意:
也可接受(并且可能需要)只有流的特定持续时间可用作提交作业的输入。