我有使用Apache Spark的源码。源代码是用Scala编写的,我想把它转换成Java。
是否可以从所有Scala源代码转换为Java?
发布于 2014-11-28 17:53:18
No。Spark Scala API不同于Java API。
tl;dr;
虽然我们可以使用一些技巧来编译/反编译,或者让一些IDE来做翻译,但是生成的代码将不能在Spark中工作。
原因之一是Spark Scala API使用隐式转换来启用Java API中不提供的依赖于类型的功能,在Java API中需要使用显式类。
一个简单的例子:
Scala
val pairs = words.map(w => (w,1)) // count here is of type RDD[(String,Int)]
val counts = words.reduceByKey(_ + _)Java
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中这不是必需的。
发布于 2014-11-28 21:26:27
那得看情况。目前,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-28 17:31:24
将源代码编译成.class文件(如果可用,也可以下载),然后尝试反编译。
以下是其中一个带有wiki how-to的工具:
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
https://stackoverflow.com/questions/27183641
复制相似问题