我有使用 Apache Spark 的源代码。源代码是用 Scala 编写的,我想将其转换为 Java。
是否可以从所有 Scala 源代码转换为 Java?
我有使用 Apache Spark 的源代码。源代码是用 Scala 编写的,我想将其转换为 Java。
是否可以从所有 Scala 源代码转换为 Java?
没有。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 中则不需要。
这取决于。目前 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 程序,这将是必不可少的。
将源代码编译为 .class 文件(或下载它,如果可用)并尝试反编译它。
这是带有 wiki how-to 的此类工具之一:
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
不,没有这样的工具可以将 Scala 源代码转换为 Java。