0

我有使用 Apache Spark 的源代码。源代码是用 Scala 编写的,我想将其转换为 Java。

是否可以从所有 Scala 源代码转换为 Java?

4

4 回答 4

3

没有。Spark Scala API 与 Java API 不同。

tl;博士;

尽管可以使用一些技巧来编译/反编译或让一些 IDE 进行翻译,但生成的代码在 Spark 中不起作用。

原因之一是 Spark Scala API 使用隐式转换来启用 Java API 中不可用的类型相关功能,其中需要使用显式类。

一个简单的例子:

斯卡拉

val pairs = words.map(w => (w,1))  // count here is of type RDD[(String,Int)]
val counts = words.reduceByKey(_ + _)

爪哇

JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
  public Tuple2<String, Integer> call(String s) { return new Tuple2<String, Integer>(s, 1); }
});
JavaPairRDD<String, Integer> counts = pairs.reduceByKey(new Function2<Integer, Integer>() {
  public Integer call(Integer a, Integer b) { return a + b; }
});

请注意 Java 对应项如何需要使用特定方法(map在 Scala 中与mapToPair在 Java 中)并指定给定类 (JavaPairRDD) 以获取对特定对函数的访问权限,而在 Scala 中则不需要。

于 2014-11-28T09:53:18.017 回答
1

这取决于。目前 Spark(直到 1.1 版)为其大部分 API/子项目提供 Java 版本,但不是全部。不支持 GraphX Java API。因此,如果您的 Scala 代码使用的是 graphx 库,那么除非您编写自定义胶水代码,否则它可能无法在 Java 中运行。

http://spark.apache.org/docs/latest/api/java/index.html

即使您设法将 Scala 类文件反编译为 Java,如果您的程序语义没有错误,您也可能无法执行 Java 代码。我建议您学习 Java API,然后用 Java 重写您的 Scala 代码。这也将使您更好地了解 Spark API,如果您想在将来编写自己的 Spark 程序,这将是必不可少的。

于 2014-11-28T13:26:27.117 回答
0

将源代码编译为 .class 文件(或下载它,如果可用)并尝试反编译它。

这是带有 wiki how-to 的此类工具之一:

https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

于 2014-11-28T09:31:24.197 回答
0

不,没有这样的工具可以将 Scala 源代码转换为 Java。

于 2014-11-29T19:17:36.253 回答