【发布时间】:2016-03-14 22:04:01
【问题描述】:
澄清问题:SparkContext 在 Java 中可用,但需要 Scala 序列。我如何让它快乐——在 Java 中?
我有这段代码来做一个简单的jsc.parallelize 我正在使用JavaSparkContext,但SparkContext 想要一个Scala 集合。我想在这里我正在构建一个 Scala Range 并将其转换为 Java 列表,不知道如何让该核心 Range 成为 Scala Seq,这就是 parallelize from SparkContext is asking for。
// The JavaSparkContext way, was trying to get around MAXINT limit, not the issue here
// setup bogus Lists of size M and N for parallelize
//List<Integer> rangeM = rangeClosed(startM, endM).boxed().collect(Collectors.toList());
//List<Integer> rangeN = rangeClosed(startN, endN).boxed().collect(Collectors.toList());
接下来是钱线,如何在 Java 中创建 Scala Seq 以进行并行化?
// these lists above need to be scala objects now that we switched to SparkContext
scala.collection.Seq<Integer> rangeMscala = scala.collection.immutable.List(startM to endM);
// setup sparkConf and create SparkContext
... SparkConf setup
SparkContext jsc = new SparkContext(sparkConf);
RDD<Integer> dataSetMscala = jsc.parallelize(rangeMscala);
【问题讨论】:
-
我正在查看 JavaConversions 对象,看起来它在 Java 或 Scala 中双向工作?
-
我怀疑你可以在 Java 中创建一个
Seq,因为它是一个trait,并且在 Java 中没有等价物。我认为在 Scala 中使用JavaConversions是正确的方法。 -
我想也许我在复制 this,我会尝试解决方案,如果可行,我会发布答案,如果我没看错的话,似乎 JavaConversion 可以在 Java 中使用:@987654327 @
-
谢谢@davidshen84 也许我不明白,我正在尝试用Java 来做这件事。我可能会切换到使用 Scala,只是我正试图完成项目中的一个重要阶段并且还不想学习一门新语言:) 当你说“特征”就像是泛型爪哇,s.t。我们使用:
List<Integer> aList = new ArrayList<>()?我现在正在看这个,看看是什么实例化了一个 Scala Seq,它看起来像 List。所以 SparkContext 要求一个 Seq,我假设如果我可以创建一个 Scala List 它会接受它。 -
trait在 Scala 中是 interface 和 abstract class 在 Java 中的混合体。 Scala 列表实现了Seq特征。如果您可以在 Java 中创建一个 Scala 列表,我想它可能适合您。我从来没有这样尝试过......祝你好运:)
标签: java scala apache-spark seq