10.4 输出操作
输出操作指定了对流数据经转化操作得到的数据所要执行的操作(例如把结果推入外部数据库或输出到屏幕上)。
与 RDD 中的惰性求值类似,如果一个 DStream 及其派生出的 DStream 都没有被执行输出操作,那么这些 DStream 就都不会被求值。
如果 StreamingContext 中没有设定输出操作,整个 context 就都不会启动。
-
print()
常用的一种调试性输出操作是 print() ,它会在每个批次中抓取 DStream 的前十个元素打印出来。 -
saveAsTextFiles()
Spark Streaming 对于 DStream 有与 Spark 类似的 save() 操作,它们接受一个目录作为参数来存储文件,还支持通过可选参数来设置文件的后缀名。每个批次的结果被保存在给定目录的子目录中,且文件名中含有时间和后缀名。 -
saveAsHadoopFiles()
更为通用的 saveAsHadoopFiles() 函数,接收一个 Hadoop 输出格式作为参数。 -
foreachRDD()
通用的输出操作,它用来对 DStream 中的 RDD 运行任意计算。
在 Scala 中使用 foreachRDD() 将数据存储到外部系统中:
ipAddressRequestCount.foreachRDD { rdd =>
rdd.foreachPartition { partition =>
// 打开到存储系统的连接(比如一个数据库的连接)
partition.foreach { item =>
// 使用连接把item存到系统中
}
// 关闭连接
}
}