2017-08-16 37 views
0

由于RDD上的foreach方法中的assert语句导致“任务不可序列化”错误。是否有任何工作可以为RDD的每个元素编写断言?由于assert语句导致SPARK任务不可序列化

class myTest extends Funsuite { 

    //some code to create spark context(sc) 

    var arrRDD = sc.parallelize(Array(1,1,1,1,1)) 

    test("custom test"){ 
    arrRDD.foreach{ 
     x => { 
      //commenting out this assert removes the error 
      assert(x == 1) 
     } 
    } 
    } 

} 

回答

0

RDD(弹性分布式数据集)是分布在节点集群中,当我们的工作,我们只看到作为单机收集这是由于抽象的集合。

当您运行RDD.map或任何其他转换如map,filter等时,会将其序列化并移动到群集上的其他节点并在这些节点上执行。

您的"Task not serializable"中的错误是由于转换arrRDD.foreach被序列化,但其中的方法"assert"未被序列化,因此它不能被移动到其他节点。

如果你愿意尝试assert值你可以collect它,这带来了数据驱动节点为arrayassert它作为

arrRDD.collect().foreach{ 
    x => assert (x == 1) 
} 

但我不认为它仍然是一个很好的办法!

希望这有助于你:)

0

如果你要测试的这款小型的用例,你可以收集成一个实际的阶集合,然后使用断言这一点。就像尚卡尔说的。

如果您想要更广泛的单元测试范围,您可以使用unit testing framework

相关问题