我是Spark和Scala的新手,所以我的问题可能很容易,但我仍然很难找到答案。我需要加入两个Spark流,但是我将这些流转换为适当的格式时遇到了问题。请参阅下面的代码:
val lines7 = ssc.socketTextStream("localhost", 9997)
val pairs7 = lines7.map(line => (line.split(" ")[0], line))
val lines8 = ssc.socketTextStream("localhost", 9998)
val pairs8 = lines8.map(line => (line.split(" ")[0], line))
val newStream = pairs7.join(pairs8)
这不起作用,因为“join”函数需要格式为DStream[String, String]
的流,而map函数的结果为DStream[(String, String)]
。
现在我的问题是如何编写这个地图函数以获得适当的输出(很少解释也很棒)?
提前致谢。
答案 0 :(得分:1)
这可以按预期工作:
import org.apache.spark.streaming.{Seconds, StreamingContext}
val ssc = new StreamingContext(sc, Seconds(30))
val lines7 = ssc.socketTextStream("localhost", 9997)
val pairs7 = lines7.map(line => (line.split(" ")(0), line))
val lines8 = ssc.socketTextStream("localhost", 9998)
val pairs8 = lines8.map(line => (line.split(" ")(0), line))
val newStream = pairs7.join(pairs8)
newStream.foreachRDD(rdd => println(rdd.collect.map(_.toString).mkString(",")))
ssc.start
我看到的唯一问题是语法错误:line.split(" ")[0]
vs line.split(" ")(0)
但我想编译器会注意到这一点。