我正在围绕Apache Spark Streaming编写一些自包含的集成测试。 我想测试我的代码可以在我的模拟测试数据中摄取各种边缘情况。 当我使用常规RDD(不是流式传输)时这样做。我可以使用我的内联数据并调用" parallelize"把它变成火花RDD。 但是,我找不到这种创建目的地的方法。理想情况下,我想打电话给#34; push"偶尔发挥作用,让魔力神奇地出现在我的dstream中。 ATM我是通过使用Apache Kafka来做到这一点的:我创建了一个临时队列,然后我写信给它。但这似乎有点矫枉过正。我更倾向于直接从我的测试数据创建测试dstream,而不必使用Kafka作为中介。
答案 0 :(得分:5)
出于测试目的,您可以从RDD队列创建输入流。 在队列中推送更多RDD将模拟在批处理间隔中处理了更多事件。
val sc = SparkContextHolder.sc
val ssc = new StreamingContext(sc, Seconds(1))
val inputData: mutable.Queue[RDD[Int]] = mutable.Queue()
val inputStream: InputDStream[Int] = ssc.queueStream(inputData)
inputData += sc.makeRDD(List(1, 2)) // Emulate the RDD created during the first batch interval
inputData += sc.makeRDD(List(3, 4)) // 2nd batch interval
// etc
val result = inputStream.map(x => x*x)
result.foreachRDD(rdd => assertSomething(rdd))
ssc.start() // Don't forget to start the streaming context
答案 1 :(得分:1)
In addition to Raphael solution I think you like to also either can process one batch a time or everything available approach. You need to set oneAtATime flag accordingly on queustream's optional method argument as shown below:
val slideDuration = Milliseconds(100)
val conf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[8]")
val sparkSession: SparkSession = SparkSession.builder.config(conf).getOrCreate()
val sparkContext: SparkContext = sparkSession.sparkContext
val queueOfRDDs = mutable.Queue[RDD[String]]()
val streamingContext: StreamingContext = new StreamingContext(sparkContext, slideDuration)
val rddOneQueuesAtATimeDS: DStream[String] = streamingContext.queueStream(queueOfRDDs, oneAtATime = true)
val rddFloodOfQueuesDS: DStream[String] = streamingContext.queueStream(queueOfRDDs, oneAtATime = false)
rddOneQueuesAtATimeDS.print(120)
rddFloodOfQueuesDS.print(120)
streamingContext.start()
for (i <- (1 to 10)) {
queueOfRDDs += sparkContext.makeRDD(simplePurchase(i))
queueOfRDDs += sparkContext.makeRDD(simplePurchase((i + 3) * (i + 3)))
Thread.sleep(slideDuration.milliseconds)
}
Thread.sleep(1000L)
答案 2 :(得分:0)
这里的关键是调用“store”命令。用你想要的任何东西替换商店的内容。