apachespark—从s3读取输入的任务数

zqry0prt  于 2021-07-13  发布在  Spark
关注(0)|答案(0)|浏览(207)

我对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如何导出它为读取某个输入而生成的任务数呢?
有人能帮我理解吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题