【问题标题】:Scala Seq for Spark in Java?Java中用于Spark的Scala Seq?
【发布时间】:2016-03-14 22:04:01
【问题描述】:

need to use SparkContext instead of JavaSparkContext for the accumulableCollection (if you don't agree check out the linked question请回答!)

澄清问题: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&lt;Integer&gt; aList = new ArrayList&lt;&gt;()?我现在正在看这个,看看是什么实例化了一个 Scala Seq,它看起来像 List。所以 SparkContext 要求一个 Seq,我假设如果我可以创建一个 Scala List 它会接受它。
  • trait 在 Scala 中是 interfaceabstract class 在 Java 中的混合体。 Scala 列表实现了Seq 特征。如果您可以在 Java 中创建一个 Scala 列表,我想它可能适合您。我从来没有这样尝试过......祝你好运:)

标签: java scala apache-spark seq


【解决方案1】:

你应该这样使用它:

scala.collection.immutable.Range rangeMscala = 
  scala.collection.immutable.Range$.MODULE$.apply(1, 10);

SparkContext sc = new SparkContext();

RDD dataSetMscala = 
  sc.parallelize(rangeMscala, 3, scala.reflect.ClassTag$.MODULE$.Object());

希望对您有所帮助!问候

【讨论】:

  • 感谢您的帮助,我通过添加以下行澄清了我的问题:澄清问题:SparkContext 在 Java 中可用,但需要 Scala 序列。我如何让它快乐——在 Java 中?
  • 好吧,你是对的,我误解了这个问题;我修改了我的答案以适合您的需求,请检查一下。
  • 我很感激,我不是 dv,但我是平衡它的 uv :) 稍后再试一下,让你知道。到目前为止看起来不错。
  • 非常酷!谢谢你。我将不得不学习使用 SparkContext,看起来我仍然可以在上面调用 JavaPairRDD?如果我不明白,我会发布另一个问题:)
  • 嘿抱歉,我以为我上周接受了这个道歉!再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 2016-10-04
  • 2020-08-12
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 2021-04-27
相关资源
最近更新 更多