我正在使用Spark流媒体连接到Google pubsub,并且能够阅读和打印消息。 我想做的是将邮件堆叠起来并将其保存到文本文件中(例如,在5分钟内收集到的所有邮件都移到同一个文件中)。
这是我创建流的方式:
val messagesStream: DStream[String] = PubsubUtils
.createStream(
ssc,
<project name>,
None,
<subscription name>,
SparkGCPCredentials.builder.build(), StorageLevel.MEMORY_AND_DISK_SER_2)
.map(message => new String(message.getData(), StandardCharsets.UTF_8))
现在,如果我使用foreachRDD,则可以轻松地将每条消息保存到不同的文件或覆盖同一文件:
messagesStream.foreachRDD((rdd) => {
rdd.coalesce(1).saveAsTextFile("/path/toFile")
})
关于如何在单个文件中批处理更多邮件的任何想法?
谢谢!