我有一个DStream“Crowd”,我想将“Crowd”中的每个元素写入套接字。当我试图从该套接字读取时,它不打印任何东西。我使用的代码下面一行:将Spark Streaming输出写入套接字
val server = new ServerSocket(4000,200);
val conn = server.accept()
val out = new PrintStream(conn.getOutputStream());
crowd.foreachRDD(rdd => {rdd.foreach(record=>{out.println(record)})})
但如果使用(这不是我想要的,虽然):
crowd.foreachRDD(rdd => out.println(rdd))
它写的东西套接字。
我怀疑使用rdd.foreach()有问题。虽然它应该工作。我不知道我错过了什么。
谢谢。理解这很有帮助。所以为了克服这个服务发现挑战,它修改了以下语句:crowd.foreachRDD(rdd => {rdd.collect.foreach(record => {out.println(record)})})。这将工作(它的工作),因为它会从工人收集rdd分区,并将其发送到将写入套接字的驱动程序。我希望这是正确的方法。你怎么看待这个...... collect.foreach .....东西? – vick 2014-11-06 09:39:47