Scala 使用MemoryStream时如何设置任务和分区的数量?
我试图理解我在运行于Scala 使用MemoryStream时如何设置任务和分区的数量?,scala,apache-spark,spark-structured-streaming,Scala,Apache Spark,Spark Structured Streaming,我试图理解我在运行于local[*]模式的Spark structure流媒体应用程序中观察到的一种奇怪行为 我的机器上有8个内核。虽然我的大多数批处理都有8个分区,但每隔一段时间我就会得到16、32或56个分区/任务,以此类推。我注意到它总是8的倍数。我在打开stage选项卡时注意到,当它发生时,这是因为存在多个LocalTableScan 也就是说,如果我有2个localtable,那么mini-batch作业将有16个任务/分区,依此类推 我的意思是,它可以进行两次扫描,将两个批次合并,然
local[*]
模式的Spark structure流媒体应用程序中观察到的一种奇怪行为
我的机器上有8个内核。虽然我的大多数批处理都有8个分区,但每隔一段时间我就会得到16、32或56个分区/任务,以此类推。我注意到它总是8的倍数。我在打开stage选项卡时注意到,当它发生时,这是因为存在多个LocalTableScan
也就是说,如果我有2个localtable,那么mini-batch作业将有16个任务/分区,依此类推
我的意思是,它可以进行两次扫描,将两个批次合并,然后将其输入到迷你批次作业中。但是,不会导致任务数=核心数量*扫描数量的小型批处理作业
下面是我设置MemoryStream的方法:
val rows = MemoryStream[Map[String,String]]
val df = rows.toDF()
val rdf = df.mapPartitions{ it => {.....}}(RowEncoder.apply(StructType(List(StructField("blob", StringType, false)))))
我有一个未来,在以下情况下,我的记忆流也会随之增长:
Future {
blocking {
for (i <- 1 to 100000) {
rows.addData(maps)
Thread.sleep(3000)
}
}
}
我想知道为什么任务的数量不同?火花是如何确定的
rdf.writeStream.
trigger(Trigger.ProcessingTime("1 seconds"))
.format("console").outputMode("append")
.queryName("SourceConvertor1").start().awaitTermination()