我有一个名为myRdd:RDD[(Long, String)]
的RDD(Long
是使用zipWithIndex()
获得的索引),其中包含许多元素,但是我需要将其削减以得到特定数量的最终结果的元素。
我想知道哪种更好的方法:
myRdd.take(num)
或
myRdd.filterByRange(0, num)
我不在乎所选元素的顺序,但是我在乎性能。
有什么建议吗?还有其他方法吗?谢谢!
答案 0 :(得分:3)
take
是一个动作,而filterByRange
是一个变换。一个动作将结果发送到驱动程序节点,并且直到调用一个动作才执行转换。
take
方法将采用RDD的前n
个元素,并将其发送回驱动程序。 filterByRange
稍微复杂一点,因为它将采用键在指定范围内的那些元素。
我要说的是,它们之间在性能方面并没有太多差异。如果您只想将结果发送给驱动程序而不关心订单,请使用take
方法。但是,如果您想受益于分布式计算,并且不需要将结果发送回驱动程序,请使用filterByRange
方法,然后调用该操作。