如何使用scala / spark在DataFrame中按顺序执行每个分区?

时间:2017-08-17 11:57:18

标签: scala apache-spark apache-spark-sql spark-dataframe

我有一个DataFrame,我想让第一个分区先执行,第二个分区是第二个执行,这是我的代码,但是它不起作用,我应该怎样做才能使每个分区按顺序执行?

 val arr = Array(1, 7, 3, 3, 5,21, 7, 3, 9, 10)
        var df=sc.parallelize(arr,4).toDF("aa")
        var arrbrocast=new HashMap[Int,Double]()
        val bro=m_sparkCtx.broadcast(arrbrocast)
        val rdd=df.rdd.mapPartitionsWithIndex((partIdx,iter)=>{
          var flag=true
          println("----"+bro.value.size)
          while (flag){
            if(bro.value.contains(partIdx-1)) {
              flag = false
            }
          }
          bro.value+=(partIdx->1.0)
          println(bro.value.get(partIdx-1).get)

         iter
        })
      rdd.count()

1 个答案:

答案 0 :(得分:0)

如果您希望按顺序处理数据请勿使用Spark 。打开文件并逐行读取输入流。从理论上讲,您可以使用onLayout来处理特定分区,但在处理完整数据集时它无用。

这也不是广播变量的工作原理。 在执行任务时不应该尝试修改它们。