【发布时间】:2018-03-19 17:04:21
【问题描述】:
给定一个 RDD,对它进行排序然后在离散大小的块中使用它的最佳方法是什么?例如:
JavaRDD<Integer> baseRdd = sc.parallelize(Arrays.asList(1,2,5,3,4));
JavaRDD<Integer> sorted = baseRdd.sortBy(x -> x, true, 5);
// returns 1, 2
List<Integer> first = sorted.take(2);
// returns 1, 2. How to skip 2 and then take?
List<Integer> second = sorted.take(2);
我真正想要的是在第一次调用take(2) 时使用1, 2,然后将某种“跳过”参数传递给第二个take(2) 以返回3, 4?
由于当前 RDD 功能中似乎不存在“跳过”功能,将已排序的 RDD 拆分为可以独立操作的已知大小的块的最有效方法是什么?
【问题讨论】:
-
您只想要索引 (0, 1) 和 (2, 3) 处的元素还是所有 (n, n+1) 处的元素?
-
不只是 (n, n+1)。如果我有一个包含 75,000 个条目的 RDD,我希望在第一次调用 take() 时获得前 25,000 个条目,然后在第二次调用 take() 时获得条目 25001 到 50000,其余条目在第三个等等。数字 2在我最初的问题中,以及这里的数字 25,000 只是示例。
标签: java apache-spark rdd