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

时间:2018-03-28 05:52:23

标签: scala apache-spark apache-spark-sql spark-dataframe

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

1 个答案:

答案 0 :(得分:2)

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

请查看here关于此问题和可能的解决方案的详细讨论