2015-06-19 22 views
9

È possibile simulare un RDD senza utilizzare sparkContext?Mock a Spark RDD nei test dell'unità

voglio unit test la seguente funzione di utilità:

def myUtilityFunction(data1: org.apache.spark.rdd.RDD[myClass1], data2: org.apache.spark.rdd.RDD[myClass2]): org.apache.spark.rdd.RDD[myClass1] = {...} 

quindi ho bisogno di passare data1 e data2 a myUtilityFunction. Come posso creare un data1 da un mock org.apache.spark.rdd.RDD [myClass1], invece di creare un vero RDD da SparkContext? Grazie!

+1

Perché non potresti? Questi sono solo oggetti di base, puoi prenderli in giro, anche se molto probabilmente è più facile usare 'sc.parallelize' piuttosto che simulare i metodi' map'/'flatMap'/.... –

risposta

9

Sono assolutamente d'accordo con @Holden su questo!

L'RDDS di simulazione è difficile; è preferibile eseguire i test dell'unità in un contesto Spark locale , come consigliato nello programming guide.

So che questo non può essere tecnicamente un test unitario, ma si spera che sia sufficiente chiudere .

Unit Testing

Spark è amichevole per unit testing con qualsiasi quadro di unit test popolare. Basta creare uno SparkContext nel test con l'URL principale impostato su locale, eseguire le operazioni e quindi chiamare SparkContext.stop() per distruggerlo. Assicurati di interrompere il contesto all'interno di un blocco finally o del metodo tearDown del framework di test, dato che Spark non supporta due contesti in esecuzione contemporaneamente nello stesso programma.

Ma se sei veramente interessato e vuoi ancora provare a deridere gli RDD, ti suggerisco di leggere il codice di prova ImplicitSuite.

L'unico motivo per cui si tratta di pseudo-simulazione del RDD consiste nel verificare se implict funziona correttamente con il compilatore, ma in realtà non è necessario un vero RDD.

def mockRDD[T]: org.apache.spark.rdd.RDD[T] = null 

E non è nemmeno un vero finto. Crea solo un oggetto nullo di tipo RDD [T]

17

Gli RDD sono piuttosto complessi, il loro derisione non è probabilmente il modo migliore per creare dati di test. Invece, consiglierei di usare sc.parallelize con i tuoi dati. Sono anche (un po 'prevenuto) pensare che https://github.com/holdenk/spark-testing-base possa essere di aiuto fornendo un tratto per impostare & e rimuovere il Contesto Spark per i test.

+0

sembra che l'ultima versione di spark-testing-base sia per Spark 1.5 - ci sono opzioni per testare con Spark 2+? – oDDsKooL

+0

Ci sono, la versione corrente supporta 2.1 – Holden

Problemi correlati