Spark:在每个执行程序上处理rdd之前调用自定义方法

时间:2016-08-31 11:37:13

标签: apache-spark spark-streaming spark-dataframe

我正在开发一个Spark Streaming应用程序。我有一个要求,我需要验证某些条件(通过读取本地FS中存在的文件)。 我试过了:

lines.foreachRDD{rdd =>
verifyCondition
rdd.map() ..

}



def verifyCondition(){
 ...
}

但是VerifyCondition仅由Driver执行。我们有没有办法让每个执行者执行它?

由于

2 个答案:

答案 0 :(得分:0)

lines.foreachRDD { rdd =>
  rdd.foreachPartition => partition
    verifyCondition(...) // This will be executed by executors, once per every partition
    partition.map(...)
  }
}

答案 1 :(得分:0)

您可以在rdd.map()中移动verifyCondition函数,如

rdd.map{
  verifyCondition
  ...
}

因为内部map是一个闭包(一个闭包是一个将一个函数与一个环境一起存储的记录),spark会将它分发给执行者,它将由每个执行者执行。