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

Spark : Call a custom method before processing rdd on each executor

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

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

}



def verifyCondition(){
 ...
}

但 verifyCondition 仅由 Driver 执行。有什么方法可以让每个执行者执行它吗?

谢谢

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

您可以像

一样在 rdd.map() 中移动 verifyCondition 函数
rdd.map{
  verifyCondition
  ...
}

因为map里面是一个闭包(闭包是一个记录,把一个函数和一个环境一起存储起来),spark会把它分发给executor,由每个executor执行。