我正在开发一个Spark Streaming应用程序。我有一个要求,我需要验证某些条件(通过读取本地FS中存在的文件)。 我试过了:
lines.foreachRDD{rdd =>
verifyCondition
rdd.map() ..
}
def verifyCondition(){
...
}
但是VerifyCondition仅由Driver执行。我们有没有办法让每个执行者执行它?
由于
答案 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会将它分发给执行者,它将由每个执行者执行。