本文主要是介绍SparkStreaming编程-DStream输出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
输出操作指定了对流数据经转化操作得到的数据所要执行的操作(例如把结果推入外部数据库或输出到屏幕上)。
与RDD中的惰性求值类似,如果一个DStream及其派生出的DStream都没有被执行输出操作,那么这些DStream就都不会被求值。
如果StreamingContext中没有设定输出操作,整个context就都不会启动。
常见的输出操作函数如下:
print()、saveAsTextFiles(prefix, [suffix])、saveAsObjectFiles(prefix, [suffix])、saveAsHadoopFiles(prefix, [suffix])、foreachRDD(func)
函数 | 描述 |
---|---|
print() | 在Driver中打印出DStream中数据的前10个元素. |
saveAsTextFiles(prefix, [suffix]) | 将DStream中的内容以文本的形式保存为文本文件,其中每次批处理间隔内产生的文件以prefix-TIME_IN_MS[.suffix]的方式命名. |
saveAsObjectFiles(prefix, [suffix]) | 将DStream中的内容按对象序列化并且以SequenceFile的格式保存,其中每次批处理间隔内产生的文件以prefix-TIME_IN_MS[.suffix]的方式命名. |
saveAsHadoopFiles(prefix, [suffix]) | 将DStream中的内容以文本的形式保存为Hadoop文件,其中每次批处理间隔内产生的文件以prefix-TIME_IN_MS[.suffix]的方式命名. |
foreachRDD(func) | 最基本的输出操作,将func函数应用于DStream中的RDD上,这个操作会输出数据到外部系统,比如保存RDD到文件或者网络数据库等;需要注意的是func函数是在运行该streaming应用的Driver进程里执行的. |
foreachRDD
foreachRDD,是一个非常强大的输出操作,它允许将数据输出到外部系统,就看你怎么使用里面的RDD了;
DStreams通过输出操作进行延迟执行,就像RDD由RDD操作懒惰地执行;
具体来说,DStream输出操作中的RDD动作强制处理接收到的数据;因此,如果您的应用程序没有任何输出操作,那么任何操作都不会被执行,系统将简单地接收数据并将其丢弃.
注意:当使用dstream.foreachRDD(fun:RDD -> Unit)这时就和没有传任何function也是一样的;
但是和不写action还是有本质的区别的,因为不写action等于不跑任何任务,这样写是跑任务的,但是任务没有最终的输出结果.
这篇关于SparkStreaming编程-DStream输出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!