Spark结构流中的LocalTableScan有什么用?

时间:2018-09-09 04:20:30

标签: scala apache-spark spark-structured-streaming

有人知道Spark结构化流中LocalTableScan对应什么吗?

我试图了解在以local [*]模式运行的Spark结构流应用程序中观察到的奇怪行为。

我的机器上有8个核心。虽然我的大多数批次都有8个分区,但偶尔我会得到16或32或56等分区/任务。我注意到它始终是8的倍数。打开阶段标签时我注意到,发生这种情况时是因为有多个LocalTableScan。

也就是说,如果我有2个LocalTableScan,则微型批处理作业将具有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()

有什么建议吗?提示吗?

1 个答案:

答案 0 :(得分:1)

它指示驱动程序的内存中。如您的代码所示。