Apache spark sparks foreachPartition是在驱动程序上运行还是在工作程序上运行?

Apache spark sparks foreachPartition是在驱动程序上运行还是在工作程序上运行?,apache-spark,pyspark,spark-dataframe,Apache Spark,Pyspark,Spark Dataframe,从文档中不清楚foreachpartition的lambda到底在哪里运行-在驱动程序上还是在工作程序上?与foreach()foreachpartition()在工作程序上执行相同。没有理由将数据传输到驱动程序以进行处理 rdd.foreachPartition { rddpartition => val thinUrl = "some jdbc url" val conn = DriverManager.getConnection(thinUrl) rddpar

从文档中不清楚foreachpartition的lambda到底在哪里运行-在驱动程序上还是在工作程序上?

与foreach()
foreachpartition()
在工作程序上执行相同。没有理由将数据传输到驱动程序以进行处理

rdd.foreachPartition { rddpartition =>
    val thinUrl = "some jdbc url"
    val conn = DriverManager.getConnection(thinUrl)
    rddpartition.foreach { record =>
        conn.createStatement().execute("some statement" )
    }
    conn.commit()
}

你能用这个关于驱动程序内存充足的声明来发布一个文档链接吗?@Vladislav Varslavans,我把它和toLocalIterator搞混了。修正了问题的案文。谢谢。但是很多时候,给出的例子是我们想要保留数据库连接的地方。因此,我们使用foreachpartition批处理请求。但是dbconnection对象是不可序列化的,那么它是如何工作的呢?您应该在传递给
foreachPartition()
函数的函数中创建db连接对象。你可以看到一个例子。这样,您就不需要序列化db连接,因为它将在工作进程上创建,并且只在那里使用。明白了。谢谢