Spark flatMapToPair vs [filter + mapToPair]

时间:2016-08-23 18:55:46

标签: apache-spark filter transformation

以下代码块之间的性能差异是什么?

1.FlatMapToPair:这个代码块使用单个转换,但基本上有一个过滤条件,它返回一个空列表,技术上不允许RDD中的这个元素继续进行

rdd.flatMapToPair(
    if ( <condition> )
        return Lists.newArrayList();

    return Lists.newArrayList(new Tuple2<>(key, element));
)

2. [Filter + MapToPair]这个代码块有两个转换,第一个转换只是使用与上面的代码块相同的条件进行过滤,但是在过滤器之后进行另一个转换mapToPair。

rdd.filter(
    (element) -> <condition>
).mapToPair(
    (element) -> new Tuple2<>(key, element)
)

Spark是否足够智能,无论转换次数如何,都可以对这两个代码块执行相同的操作,或者在代码块2中执行情况​​更糟,因为这些是两次转换?

由于

1 个答案:

答案 0 :(得分:3)

实际上,Spark会在第一种情况下表现更差,因为它必须初始化然后为每条记录垃圾收集新的ArrayList。在大量记录中,它可能会增加大量开销。

否则Spark“足够智能”使用惰性数据结构,并将多个转换组合在一起,不需要随机播放。

在某些情况下,显式合并不同的转换是有益的(要么减少初始化对象的数量,要么保持较短的谱系),但这不是其中之一。