我有使用Apache Spark的源代码。源代码是用Scala编写的,我想将它转换为Java。
是否可以从所有Scala源转换为Java?
答案 0 :(得分: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对应方需要使用特定方法(Scala中的map
与Java中的mapToPair
)并指定给定的类(JavaPairRDD)来访问特定的对函数,而在Scala中这不是必需的。
答案 1 :(得分: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程序,这将是必不可少的。
答案 2 :(得分:0)
将源代码编译为.class文件(或在可用时下载),并尝试编译它。
以下是wiki操作方法的其中一个工具:
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
答案 3 :(得分:0)
不,没有这样的工具可以将Scala源转换为Java。