首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala中的Spark代码可以转换成Java吗?

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

Stack Overflow用户
提问于 2014-11-28 15:12:37
回答 4查看 1.5K关注 0票数 0

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

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

EN

回答 4

Stack Overflow用户

发布于 2014-11-28 17:53:18

No。Spark Scala API不同于Java API。

tl;dr;

虽然我们可以使用一些技巧来编译/反编译,或者让一些IDE来做翻译,但是生成的代码将不能在Spark中工作。

原因之一是Spark Scala API使用隐式转换来启用Java API中不提供的依赖于类型的功能,在Java API中需要使用显式类。

一个简单的例子:

Scala

代码语言:javascript
复制
val pairs = words.map(w => (w,1))  // count here is of type RDD[(String,Int)]
val counts = words.reduceByKey(_ + _)

Java

代码语言:javascript
复制
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中这不是必需的。

票数 3
EN

Stack Overflow用户

发布于 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程序,这是必不可少的。

票数 1
EN

Stack Overflow用户

发布于 2014-11-28 17:31:24

将源代码编译成.class文件(如果可用,也可以下载),然后尝试反编译。

以下是其中一个带有wiki how-to的工具:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27183641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档