Testing 在apache spark中以编程方式创建数据流
我正在围绕ApacheSpark流编写一些自包含的集成测试。 我想测试我的代码是否能够在模拟测试数据中吸收各种边缘情况。 当我使用常规RDD(非流媒体)进行此操作时。我可以使用内联数据并对其调用“并行化”,将其转换为spark RDD。 但是,我找不到创建destream的方法。理想情况下,我希望偶尔调用一些“push”函数,让元组神奇地出现在我的数据流中。 ATM我使用ApacheKafka来实现这一点:我创建一个临时队列,然后向它写入数据。但这似乎有点过分了。我更愿意直接从测试数据创建测试数据流,而不必使用Kafka作为中介 我发现了这个基本示例: 这里的关键是调用“store”命令。将存储区的内容替换为您想要的任何内容。我发现了以下基本示例:Testing 在apache spark中以编程方式创建数据流,testing,apache-spark,dstream,Testing,Apache Spark,Dstream,我正在围绕ApacheSpark流编写一些自包含的集成测试。 我想测试我的代码是否能够在模拟测试数据中吸收各种边缘情况。 当我使用常规RDD(非流媒体)进行此操作时。我可以使用内联数据并对其调用“并行化”,将其转换为spark RDD。 但是,我找不到创建destream的方法。理想情况下,我希望偶尔调用一些“push”函数,让元组神奇地出现在我的数据流中。 ATM我使用ApacheKafka来实现这一点:我创建一个临时队列,然后向它写入数据。但这似乎有点过分了。我更愿意直接从测试数据创建测试数
这里的关键是调用“store”命令。用您想要的任何内容替换存储区的内容。出于测试目的,您可以从RDD队列中创建输入流。 在队列中推送更多RDD将模拟在批处理间隔中处理了更多事件
val sc=SparkContextHolder.sc
val ssc=新的StreamingContext(sc,秒(1))
val inputData:mutable.Queue[RDD[Int]]=mutable.Queue()
val inputStream:InputDStream[Int]=ssc.queueStream(inputData)
inputData+=sc.makeRDD(列表(1,2))//模拟在第一批处理间隔期间创建的RDD
inputData+=sc.makeRDD(列表(3,4))//第二批间隔
//等
val result=inputStream.map(x=>x*x)
result.foreachRDD(rdd=>assertSomething(rdd))
ssc.start()//不要忘记启动流上下文
出于测试目的,您可以从RDD队列中创建输入流。
在队列中推送更多RDD将模拟在批处理间隔中处理了更多事件
val sc=SparkContextHolder.sc
val ssc=新的StreamingContext(sc,秒(1))
val inputData:mutable.Queue[RDD[Int]]=mutable.Queue()
val inputStream:InputDStream[Int]=ssc.queueStream(inputData)
inputData+=sc.makeRDD(列表(1,2))//模拟在第一批处理间隔期间创建的RDD
inputData+=sc.makeRDD(列表(3,4))//第二批间隔
//等
val result=inputStream.map(x=>x*x)
result.foreachRDD(rdd=>assertSomething(rdd))
ssc.start()//不要忘记启动流上下文
除了拉斐尔解决方案之外,我认为您还喜欢一次处理一批或所有可用的方法。您需要在queustream的可选方法参数上相应地设置oneAtATime标志,如下所示:
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)
val slideDuration=毫秒(100)
val conf=new SparkConf().setAppName(“NetworkWordCount”).setMaster(“local[8]”)
val sparkSession:sparkSession=sparkSession.builder.config(conf.getOrCreate())
val sparkContext:sparkContext=sparkSession.sparkContext
val queueofrds=mutable.Queue[RDD[String]]()
val streamingContext:streamingContext=新streamingContext(sparkContext,slideDuration)
val rddonequeuestatimeds:DStream[String]=streamingContext.queueStream(queueofrds,oneAtATime=true)
val rddfloodofqueesds:DStream[String]=streamingContext.queueStream(queueOfRDDs,oneAtATime=false)
RDDONEQUEUESATIMEDS.打印(120)
RDDFloodoFQUESDS.打印(120)
streamingContext.start()
对于(i除了Raphael解决方案之外,我认为您还可以一次处理一批或所有可用的方法。您需要在queustream的可选方法参数上相应地设置oneAtATime标志,如下所示:
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)
val slideDuration=毫秒(100)
val conf=new SparkConf().setAppName(“NetworkWordCount”).setMaster(“local[8]”)
val sparkSession:sparkSession=sparkSession.builder.config(conf.getOrCreate())
val sparkContext:sparkContext=sparkSession.sparkContext
val queueofrds=mutable.Queue[RDD[String]]()
val streamingContext:streamingContext=新streamingContext(sparkContext,slideDuration)
val rddonequeuestatimeds:DStream[String]=streamingContext.queueStream(queueofrds,oneAtATime=true)
val rddfloodofqueesds:DStream[String]=streamingContext.queueStream(queueOfRDDs,oneAtATime=false)
RDDONEQUEUESATIMEDS.打印(120)
RDDFloodoFQUESDS.打印(120)
streamingContext.start()
为了