My Spark作业包含一系列地图操作
JavaRDD<Row> rowRDD = raw
.javaRDD()
.mapPartitions(new CustomPartitionMapper())
.map(new DataSpecialMapper(config))
.map(new CsvFormatMapper(config))
.map(new ReportCounters());
从编程的角度来看,代码更具可读性和可测试性。
问题是关于绩效。
将由Spark解释为映射器操作的映射器链是否将在同一执行器中执行?如果不是可能对性能产生什么影响?
由于
答案 0 :(得分:2)
将Spark作为一个映射器解释为mappers的链 操作并将在同一执行人中执行?
Spark会将多个窄转换优化为单个阶段,这意味着随后将在同一任务伞下运行多个map
任务。 (见this blog post for more)
但是,你仍然会迭代这些分区中的每一个4 * O(n)次,这仍然是O(n),但可能在给定的输入大小效果性能,这始终是要记住的事情。