Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用MemoryStream时如何设置任务和分区的数量?_Scala_Apache Spark_Spark Structured Streaming - Fatal编程技术网

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()