星空逐梦路人 2022-07-22 20:30
浏览 8
已结题

关于#Spark中stage内并行问题#的问题,如何解决?

如图所示,测试Spark0与Stage1之间运行顺序与Stage0内pipeline①②的运算顺序,Stage0两个分区,Stage1三个分区;
打印结果在stage0第一个pipeline①执行完后,调用了Stage1内的RDD4,后继续运行Stage0内的pipeline②

如何解释Stage运行时跨分区的情况呢?

object Hello15Pipeline {
  def main(args: Array[String]): Unit = {
    //初始化配置
    val context: SparkContext = new SparkContext(new SparkConf().setMaster("local").setAppName("PPLine"))
    //rdd: 构建RDD
    val rdd: RDD[Int] = context.parallelize(Array[Int](1,2,3,4,5,6,7,8), 2)
    //rdd1:使用map,打印调用记录
    val rdd1: RDD[Int] = rdd.map((x) => {
      println("rdd1----pid:" + TaskContext.getPartitionId() + "---" + x)
      x
    })
    //rdd2:使用filter,打印调用记录
    val rdd2: RDD[Int] = rdd1.filter((x) => {
      println("rdd2----pid:" + TaskContext.getPartitionId() + "---" + x)
      true
    })
    //rdd3:使用map,构建元组
    val rdd3: RDD[(String, Int)] = rdd2.map((x) => {
      println("rdd3----pid:" + TaskContext.getPartitionId() + "---" + x)
      Tuple2("测试" + x % 3, x)
    })
    //rdd4:使用reduceByKey,进行合并,使用shuffle
    val rdd4: RDD[(String, Int)] = rdd3.reduceByKey((sum: Int, value: Int) => {
      println("rdd4----pid:" + TaskContext.getPartitionId() + "---"+sum +"-----" + "值"+ value)
      sum + value
    },4)
    //rdd5:使用map,打印rdd4运算的结果
    val rdd5: RDD[(String, Int)] = rdd4.map((x) => {
      println("rdd5----pid:" + TaskContext.getPartitionId() + "---" + x)
      x
    })

    rdd5.count()
    context.stop()
  }
}

打印结果

rdd1----pid:0---1
rdd2----pid:0---1
rdd3----pid:0---1
rdd1----pid:0---2
rdd2----pid:0---2
rdd3----pid:0---2
rdd1----pid:0---3
rdd2----pid:0---3
rdd3----pid:0---3
rdd1----pid:0---4
rdd2----pid:0---4
rdd3----pid:0---4
rdd4----pid:0---1-----值4
rdd1----pid:1---5
rdd2----pid:1---5
rdd3----pid:1---5
rdd1----pid:1---6
rdd2----pid:1---6
rdd3----pid:1---6
rdd1----pid:1---7
rdd2----pid:1---7
rdd3----pid:1---7
rdd1----pid:1---8
rdd2----pid:1---8
rdd3----pid:1---8
rdd4----pid:1---5-----值8
rdd4----pid:0---2-----值13
rdd5----pid:0---(测试2,15)
rdd4----pid:2---3-----值6
rdd5----pid:2---(测试0,9)
rdd4----pid:3---5-----值7
rdd5----pid:3---(测试1,12)

Process finished with exit code 0
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 7月30日
    • 创建了问题 7月22日

    悬赏问题

    • ¥15 有偿求苍穹外卖环境配置
    • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
    • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
    • ¥15 clousx6整点报时指令怎么写
    • ¥30 远程帮我安装软件及库文件
    • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
    • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
    • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
    • ¥15 Android studio 无法定位adb是什么问题?
    • ¥15 C#连接不上服务器,