JavaApacheSpark是触发RDD转换的最便宜的方法
我是ApacheSpark的新手,我已经建立了一个独立的集群来运行大量数据(整数)的排序算法
我让它按我想要的方式工作。核心内容如下:
JavaRDD<Integer> rdd = ctx
.parallelize(Collections.<Integer>emptyList(), PARTITIONS)
.mapPartitions(partition ->
ThreadLocalRandom
.current()
.ints(NUMBERS_PER_PARTITION, Integer.MIN_VALUE, Integer.MAX_VALUE)
.boxed()
.parallel()
.collect(Collectors.toList()))
.sortBy(x -> x, true, PARTITIONS);
这将在集群中生成随机数,然后对它们进行排序
问题是,我只对实验的排序时间感兴趣,但Spark很懒,排序只能通过给定的操作触发。我正在使用count()
来触发排序,但是完成计数需要很长时间,因此会延迟我的实验。我不在乎得到排序的数字,甚至不在乎它的样本,因为我已经知道它的排序是正确的
有没有一种方法可以在不必等待触发它的操作完成的情况下触发.sortBy()
?如果没有,还有比count()
更便宜的行动吗
# 1 楼答案
排序是一个懒惰的过程
您可以使用一个非延迟返回值来触发操作
您已经尝试了计数,这花费了很多时间
try:first()或take(n)
下面是惰性/非惰性操作的列表
https://www.mapr.com/ebooks/spark/apache-spark-cheat-sheet.html