Apache Spark:何时不使用 mapPartition 和 foreachPartition?

Apache Spark : When not to use mapPartition and foreachPartition?

我知道当我们想要为一组 RDD 而不是单个 RDD 元素初始化一些资源时,我们应该理想地使用 mapPartition 和 foreachPartition。例如,在为每个数据分区初始化 JDBC 连接的情况下。但是在某些情况下,我们不应该使用它们中的任何一个,而是使用普通的 map() 和 foreach() 转换和操作。

当您编写使用 mapPartition 或 foreachPartition 的 Spark 作业时,您可以只修改分区数据本身或只分别迭代分区数据。作为参数传递的匿名函数将在执行程序上执行,因此没有一种可行的方法来执行调用所有节点的代码,例如:来自一个特定执行程序的 df.reduceByKey。此代码应仅从驱动程序节点执行。因此,您只能从驱动程序代码访问数据帧、数据集和 spark 会话。

请查找 对此问题的详细讨论和可能的解决方案