Apache spark web UI中的ThreadPoolExecutors作业是什么;什么是火花工作?

Apache spark web UI中的ThreadPoolExecutors作业是什么;什么是火花工作?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我正在使用Spark SQL 1.6.1并执行一些连接 查看spark UI,我看到一些作业的描述为“在ThreadPoolExecutor.java:1142上运行” 我想知道为什么有些Spark作业会得到这样的描述?经过一些调查,我发现在ThreadPoolExecutor上运行。java:1142Spark作业与join运算符的查询相关,这些运算符符合BroadcastHashJoin的定义,其中一个连接端被广播给执行者以进行连接 BroadcastHashJoin操作员使用Thread

我正在使用Spark SQL 1.6.1并执行一些连接

查看spark UI,我看到一些作业的描述为“在ThreadPoolExecutor.java:1142上运行”


我想知道为什么有些Spark作业会得到这样的描述?

经过一些调查,我发现在ThreadPoolExecutor上运行。java:1142Spark作业与
join
运算符的查询相关,这些运算符符合
BroadcastHashJoin
的定义,其中一个连接端被广播给执行者以进行连接

BroadcastHashJoin
操作员使用
ThreadPool
进行此异步广播(请参阅和)

切换到SQL选项卡时,您应该会看到已完成的查询部分及其作业(在右侧)

在我的例子中,运行在“runatthreadpoolexecutor.java:1142”上的Spark作业,其中ID为12和16

它们都对应于
join
查询

如果您想知道“我的一个连接导致此作业出现是有道理的,但据我所知,连接是一个无序转换而不是一个操作,那么为什么要用ThreadPoolExecutor而不是我的操作来描述此作业(与我的其他作业一样)?”,那么我的答案通常是这样的:


Spark SQL是Spark的一个扩展,它有自己的抽象(
Dataset
s,仅举一个很快浮现在脑海中的抽象),有自己的执行运算符。一个“简单”SQL操作可以运行一个或多个Spark作业。由Spark SQL的执行引擎决定要运行或提交多少Spark作业(但它们确实在幕后使用RDD)——您不必知道如此低的级别细节,因为它……嗯……太低了……因为您使用Spark SQL的SQL或查询DSL是如此高的级别。

读写csv时也会发生这种情况


在这些手术中,我第一次目睹了这个线程池执行器。

Laskowski博士来到了救援现场。令人惊叹的!
scala> spark.version
res16: String = 2.1.0-SNAPSHOT

scala> val left = spark.range(1)
left: org.apache.spark.sql.Dataset[Long] = [id: bigint]

scala> val right = spark.range(1)
right: org.apache.spark.sql.Dataset[Long] = [id: bigint]

scala> left.join(right, Seq("id")).show
+---+
| id|
+---+
|  0|
+---+