我对sparksql还不太熟悉,我正试着去了解sparksui。
我有一个问题如下:
create temp view mytab1 as
select
cust_id,
cust_name,
start_date
from cust;
create temp view mytab2 as
select
cust_id,
addr_date,
addr_1
from cust_addr;
select
cust_id, cust_name, addr1
from mytab1 c
inner join (select *, row_number() over (partition by cust_id order by addr_date DESC) as rnum
from mytab2
) t
on c.cust_id = t.cust_id
where t.rnum = 1;
从spark界面我发现 10
工作和 10
阶段。从这些 10
阶段, 3
阶段(即2、3和4)用于从s3读取输入数据,每个阶段的dag是:
FilesScanRDD --> MapPartitionsRDD --> MapPartitionsRDD
其余阶段将用于执行查询。
现在,我发现了 Stage-2
以及 Stage-3
曾经用过 3
每个任务读取数据,而 Stage-4
曾经用过 117
任务。那么spark如何确定要创建的读取输入数据的任务数呢。源数据存储为 Parquet
上的文件 S3
占领 10
文件夹中的分区/文件(例如。 s3://myfolder/test-data/part-00009.snappy.parquet
等等)。在spark ui中,输入大小显示为 Stage-2
, Stage-3
以及 Stage-4
作为 450.9
mb, 109.5
mb和 25.9
分别为mb。
我试图理解:
spark如何确定它将为上述特定sql查询创建的作业数?
如何计算输入数据的大小(在s3上)以及它在spark将要读取的磁盘上跨越的分区数?
最重要的是,如上所述,spark为读取每个输入而创建的任务数是不同的(3、3和117),那么spark如何导出它为读取某个输入而生成的任务数呢?
有人能帮我理解吗?
暂无答案!
目前还没有任何答案,快来回答吧!