首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建模拟元素的Spark RDD?

如何创建模拟元素的Spark RDD?
EN

Stack Overflow用户
提问于 2018-08-10 03:44:57
回答 1查看 567关注 0票数 0

我想创建一个RDD (实际的,不是模拟的),它在单元测试中包含模拟的元素(使用Mockito)。

我的尝试是:

代码语言:javascript
运行
复制
lazy val sc = SparkContext.getOrCreate()
val myRDD = sc.parallelize(Seq( (Mockito.mock(classOf[ImmutableBytesWritable]), Mockito.mock(classOf[Result])) ))

其中ImmutableBytesWritableResult来自HBase接口。我有org.apache.spark.SparkException: Task not serializable

有没有可能实现我的目标?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-11 02:20:32

默认情况下,Mockito mock是不可序列化的,这就是出现错误的原因。

要创建可序列化的mock,您必须显式定义它:

代码语言:javascript
运行
复制
mock = Mockito.mock(
    classOf[ImmutableBytesWritable],
    Mockito.withSettings().serializable()
)

同样的事情也应该应用到你的Result模拟中。

如果你得到一个java.lang.ClassNotFoundException: org.apache.hadoop.hbase.io.ImmutableBytesWritable$MockitoMock$...异常,你可能需要使用:

代码语言:javascript
运行
复制
import org.mockito.mock.SerializableMode

mock = Mockito.mock(
    classOf[ImmutableBytesWritable],
    Mockito.withSettings().serializable(SerializableMode.ACROSS_CLASSLOADERS)
)

最后,你应该有类似这样的东西:

代码语言:javascript
运行
复制
import org.apache.spark.SparkContext 
import org.apache.spark.SparkConf    

import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.client.Result

import org.mockito.Mockito
import org.mockito.mock.SerializableMode

object Test extends App {

    val conf = new SparkConf()
        .setMaster("local[2]")
        .setAppName("test")
    lazy val sc = new SparkContext(conf)

    val mockImmutableBytesWritable = Mockito.mock(
        classOf[ImmutableBytesWritable],
        Mockito.withSettings().serializable(
            SerializableMode.ACROSS_CLASSLOADERS
        )
    )

    val mockResult = Mockito.mock(
        classOf[Result],
        Mockito.withSettings().serializable(
            SerializableMode.ACROSS_CLASSLOADERS
        )
    )

    val myRDD = sc.parallelize(Seq((mockImmutableBytesWritable, mockResult)))

    println(myRDD.count)

    sc.stop()

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

https://stackoverflow.com/questions/51774731

复制
相关文章

相似问题

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