对于下面的代码,.count()
是将值返回给驱动程序还是仅返回给执行程序?
JavaPairDStream<String, String> dstream ...
stream.foreachRDD(rdd -> {
long count = rdd.count();
// some code to save count to Datastore
});
我知道通常count()
将值返回给驱动程序,但我不确定当它在 foreacRDD 内部时会发生什么?
对于将来的其他相关问题,是否有一种简单的方法来验证代码块是否在驱动程序或执行器上执行?
授予对 RDD 的访问权限的操作,例如在驱动程序的上下文中执行transform(rdd => ...)
和foreachRDD(rdd => ...)
。令人困惑的思维扭曲是,对该RDD
的操作将在群集中的执行器上执行。
例如:
stream.foreachRDD(rdd -> {
long count = rdd.count(); // the count is executed on the cluster, the result it brought back to the driver, like in core Spark
RDD<> richer = rdd.map(elem => something(elem)) // executes distributed
db.store(richer.top(10)) // executes in the driver
}(;