Scala中的Spark代码可以转换为Java吗?

时间:2014-11-28 07:12:37

标签: java scala apache-spark apache-spark-mllib

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

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

4 个答案:

答案 0 :(得分:3)

即可。 Spark Scala API与Jav​​a API不同。

TL;博士;

虽然可以做一些编译/反编译技巧或让某些IDE进行翻译,但生成的代码在Spark中不起作用。

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

一个简单的例子:

Scala的

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。