Если вы хотите пойти по пути rdd
, вы можете передать все данные одному исполнителю и выполнить цикл для , как показано ниже
df.rdd.coalesce(1).mapPartitions(iterator => {
var y = "1"
for (x <- iterator) yield {
val id = x.getAs[String]("id")
val flag = x.getAs[Boolean]("flag")
if(flag == false){
y = id
newdf(id, flag, y)
}else{
newdf(id, flag, y)
}
}
}).toDF()
и для этого вам понадобится класс кейса
case class newdf(id:String, flag:Boolean, new_id:String)
Вы тоже можете обходиться без класса case , но я предпочитаю использовать case case