2016-05-03 4 views
0

У меня есть искровая работа, как:тестирования искровых работ с издевается

stream. 
..do some stuff.. 
map(HbaseEventProcesser.process) 

сейчас HbaseEventProcesser является объектом Scala (Singleton). Таким образом, нет проблем с сериализацией.

Проблема в тестировании этой искровой работы (используется holdenkarau spark-test lib). Я хочу высмеять HbaseEventProcessor с некоторой другой реализацией. Я пробовал два подхода:

  • Проводить имплентацию в искровое задание (как аргумент конструктора, а не метод вызова внутри карты). Это вызывает проблему с проблемой сериализации
  • использование силаMock. К сожалению, операция deepcopy завершилась неудачно, если используется SharedSparkContext.

Есть ли другие способы обхода?

ответ

0

У вас есть по крайней мере, следующие варианты:

1) делают HbaseEventProcesser регулярный класс, который расширяет некоторые чисто черта EventProcessor, и чем издеваться над его рамках вы выбор

2) рефакторинга, рефакторинга вы код для SMTH как это

def mapStream[T, R](stream: DStream[T], process: T => R) = { 
stream. 
..do some stuff.. 
map(process) 
} 

//in main code: 
mapStream(stream, HbaseEventProcesser.process) 

//in test code: 
mapStream(stream, customFunc) 
+0

это первое, что я сделал. Однако это вызывает проблему сериализации. I meen: чтобы класс HBaseEventProcessor расширял EventProcessor и SparkJob (eventProcessor: EventProcessor) {.... rdd.map (eventProcessor)} – Natalia

+0

Вы пытались сделать его сериализуемым: 'class HBaseEventProcessor расширяет java.io.Serializable с помощью EventProcessor '? –

+0

Уверен, в результате я получаю: \t Вызвано: java.io.NotSerializableException .....- object (класс com ...... ClientDerivedEventsStreamingJob $$ anonfun $ preStream $ 2 $$ anonfun $ 9, ) – Natalia

Смежные вопросы