Spark 性能中的映射操作链

Dav*_*ein 5 java performance apache-spark

我的 Spark 作业包含一系列地图操作

JavaRDD<Row> rowRDD = raw
            .javaRDD()
            .mapPartitions(new CustomPartitionMapper())
            .map(new DataSpecialMapper(config))
            .map(new CsvFormatMapper(config))
            .map(new ReportCounters());
Run Code Online (Sandbox Code Playgroud)

从编程的角度来看,代码更具可读性和可测试性。问题是关于性能的。

映射器链是否会被 Spark 解释为一个映射器操作并在同一个执行器中执行?如果不是,可能会对性能产生什么影响?

谢谢

Yuv*_*kov 4

Spark 是否将映射器链解释为一个映射器操作并在同一个执行器中执行?

Spark 将多个窄转换优化为单个阶段,这意味着多个map任务将在同一任务伞下随后运行。(有关更多信息,请参阅此博客文章

但是,您仍然需要对每个分区进行 4 * O(n) 次迭代,这仍然是 O(n) 次,但在给定的输入大小下可能会影响性能,这一点始终需要牢记。