【发布时间】:2016-10-06 04:43:32
【问题描述】:
我正在为我的 spark 应用程序编写单元测试,但遇到了问题。理想情况下,我想要一个Before 和After 方法来启动和停止spark(而不是在单元测试方法本身中进行)。
以下实现有效,我可以在测试开始时声明SparkConf 和JavaSparkContext,然后在最后执行sc.close()。
@Test
public void testMethod(){
SparkConf conf = new SparkConf().setMaster("local").setAppName("testGeoHashAggregation");
JavaSparkContext sc = new JavaSparkContext(conf);
// yadda yadda yadda
//tests here
sc.close()
}
但我想设置一下,让 start 和 stop 有自己的方法
@Before
public void init(){
SparkConf conf = new SparkConf().setMaster("local").setAppName("testGeoHashAggregation");
JavaSparkContext sc = new JavaSparkContext(conf);
}
@After
public void close(){
sc.close();
}
任何想法为什么后者不起作用?我会遇到一些对象不可序列化的异常。
【问题讨论】:
-
第二个代码看起来很奇怪——我想
JavaSparkContext不仅在init()中,而且在课堂上。如果序列化问题出在某个对象上 - 只是implement Serializable接口。如果您对JavaSparkContext的序列化有问题,请将瞬态添加到此字段。类似 ->public class YourClass { private transient JavaSparkContext sc; .... all code here with Before ... After
标签: java unit-testing apache-spark junit