繁体   English   中英

从 DropResult 对象构建 Spark JavaRDD 列表

[英]Build Spark JavaRDD List from DropResult objects

(Scala 中的可能在 Java 中应该是可能的,对吗?但我也会接受 Scala 的建议)

我不是要迭代 RDD,而是需要从名为 DropResult 的随机/模拟器类中构建一个包含 n 个元素的 RDD。 DropResult 不能转换成其他任何东西。

我认为 Spark“找到 PI”的例子让我走上了正确的轨道,但没有运气。 这是我正在尝试的:

在一次性的基础上, DropResult 是这样制作的:从 pld (PipeLinkageData) 制作单个 DropResult

DropResult dropResultSeed = pld.doDrop();

我正在尝试这样的事情:

JavaRDD<DropResult> simCountRDD = spark.parallelize(makeRangeList(1, getSimCount())).foreach(pld.doDrop());

我只需要在集群上运行 pld.doDrop() 大约 10^6 次,并将结果放入 Spark RDD 以供下一个操作,也在集群上。 我不知道在“并行化”上使用什么样的函数来完成这项工作。

制作范围列表:

private List<Integer> makeRangeList(int lower, int upper) {
    List<Integer> range = IntStream.range(lower, upper).boxed().collect(Collectors.toList());
    return range;    
}

(FWIW 我试图使用来自http://spark.apache.org/examples.html的 Pi 示例作为如何执行 for 循环来创建 JavaRDD 的模型)

int count = spark.parallelize(makeRange(1, NUM_SAMPLES)).filter(new Function<Integer, Boolean>() {
  public Boolean call(Integer i) {
    double x = Math.random();
    double y = Math.random();
    return x*x + y*y < 1;
  }
}).count();
System.out.println("Pi is roughly " + 4 * count / NUM_SAMPLES);

是的,看起来你应该能够很容易地做到这一点。 听起来您只需要将 10^6 个整数的 RDD 并行化,这样您就可以将 10^6 个 DropResult 对象创建到 RDD 中。

如果是这种情况,我认为您不需要像上面那样显式地创建一个列表。 看起来您应该能够像 Spark Pi 示例那样使用 makeRange() :

JavaRDD<DropResult> simCountRDD = spark.parallelize(makeRange(1,getSimCount())).map(new Function<Integer, DropResult>() 
{
  public DropResult call(Integer i) { 
     return pld.doDrop(); 
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM