这是我简化的Apache Spark Streaming代码,它通过Kafka Streams获取输入,组合,打印并将它们保存到文件中。但现在我希望将传入的数据流保存在MongoDB中。
val conf = new SparkConf().setMaster("local[*]")
.setAppName("StreamingDataToMongoDB")
.set("spark.streaming.concurrentJobs", "2")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val ssc = new StreamingContext(sc, Seconds(1))
val kafkaParams = Map("metadata.broker.list" -> "localhost:9092")
val topicName1 = List("KafkaSimple").toSet
val topicName2 = List("SimpleKafka").toSet
val stream1 = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicName1)
val stream2 = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicName2)
val lines1 = stream1.map(_._2)
val lines2 = stream2.map(_._2)
val allThelines = lines1.union(lines2)
allThelines.print()
allThelines.repartition(1).saveAsTextFiles("File", "AllTheLinesCombined")
我已经尝试过Stratio Spark-MongoDB库和其他一些资源,但仍然没有成功。有人请帮我继续或重定向到一些有用的工作资源/教程。干杯:)
答案 0 :(得分:0)
如果您希望写出DStreams
不直接支持的格式,可以使用foreachRDD
使用基于RDD的Mongo API逐个写出每个批次。
答案 1 :(得分:0)
lines1.foreachRDD ( rdd => {
rdd.foreach( data =>
if (data != null) {
// Save data here
} else {
println("Got no data in this window")
}
)
})
对第2行也这样做。