我有一个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()
答案 0 :(得分:0)
如果您希望按顺序处理数据请勿使用Spark 。打开文件并逐行读取输入流。从理论上讲,您可以使用onLayout
来处理特定分区,但在处理完整数据集时它无用。
这也不是广播变量的工作原理。 在执行任务时不应该尝试修改它们。