Sha*_*kar 6 java scala cloudera-cdh
我有一个来自RecordService API的Scala Implicit类,我想在Java文件中使用它.
package object spark {
implicit class RecordServiceContext(ctx: SparkContext) {
def recordServiceTextFile(path: String) : RDD[String] = {
new RecordServiceRDD(ctx).setPath(path)
.map(v => v(0).asInstanceOf[Text].toString)
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用下面的导入在Java文件中导入它.
import com.cloudera.recordservice.spark.*;
Run Code Online (Sandbox Code Playgroud)
但是我无法使用来自sparkContext的recordServiceTextFile("path").
在Scala中,导入稍有不同,而且工作正常.
这是包对象中隐式类的简单定义
package object spark {
implicit class Ext(param: Int) {
def a = param + 1
}
}
Run Code Online (Sandbox Code Playgroud)
以下是如何在java中使用它
public class Test {
public static void main(String[] args) {
spark.package$.MODULE$.Ext(123).a();
}
}
Run Code Online (Sandbox Code Playgroud)
所以你基本上可以RecordServiceContext用作包装你的方法,SparkContext并添加一个你可以调用的额外方法.这是隐式类的优化.
那将是这样的:
SparkContext c = ???
RDD<String> rdd = com.cloudera.recordservice.spark.package$.MODULE$.RecordServiceContext(c)
.recordServiceTextFile("asdf");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2742 次 |
| 最近记录: |