更新的问题
我不清楚的地方=> 在 ShuffleMapStage 中,每个映射器都会创建一个 .data 和一个 .index 文件
这些数据/索引将具有名称,如
shuflle_X_Y_Z
其中
X = shuffle_id
Y = map_id
Z = REDUCER_ID
我了解map_id的范围可以是1-222394
但是如何减少REDUCER_ID ?
是1-200(例如ResultStage的默认分区)吗?
是=执行者数量吗?
如果它是1-200,那么这200个任务如何知道要读取哪个数据/索引文件?
帮助我理解这一点
我不了解减少/整合的工作原理吗? 说我有一个简单的例子,例如
input_df = spark.read.parquet("Big_folder_having parquets")
# Spark loads and during reading partitions = as per number of files * number of 128MB blocks.
# Now I do a Simple Aggergation/Count
input_df.createOrReplaceTempView("table1")
grouped_df = spark.sql("select key1,key2,count(1) as user_count from table1 group by 1,2")
# And simply write it with default 200 parallelism
grouped_df.write.format("parquet").mode("overwrite").save(my_save_path)
因此对于输入负载,父级rdd /输入映射舞台具有 22394 个分区
据我了解,每个映射器都会创建一个 shuflle数据和索引文件
现在下一个阶段仅具有 200 个任务(默认随机播放分区)
这200个化简器/任务如何处理22394个映射器任务的输出?